{
  "_format": "hh-sol-artifact-1",
  "contractName": "PermissionedEIP712Proxy",
  "sourceName": "contracts/eip712/proxy/examples/PermissionedEIP712Proxy.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract IEAS",
          "name": "eas",
          "type": "address"
        },
        {
          "internalType": "string",
          "name": "name",
          "type": "string"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "AccessDenied",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "DeadlineExpired",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ECDSAInvalidSignature",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "length",
          "type": "uint256"
        }
      ],
      "name": "ECDSAInvalidSignatureLength",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "ECDSAInvalidSignatureS",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidEAS",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidLength",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidShortString",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidSignature",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NotFound",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "OwnableInvalidOwner",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "OwnableUnauthorizedAccount",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "str",
          "type": "string"
        }
      ],
      "name": "StringTooLong",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "UsedSignature",
      "type": "error"
    },
    {
      "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"
    },
    {
      "inputs": [],
      "name": "acceptOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "bytes32",
              "name": "schema",
              "type": "bytes32"
            },
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint64",
                  "name": "expirationTime",
                  "type": "uint64"
                },
                {
                  "internalType": "bool",
                  "name": "revocable",
                  "type": "bool"
                },
                {
                  "internalType": "bytes32",
                  "name": "refUID",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                },
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "internalType": "struct AttestationRequestData",
              "name": "data",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint8",
                  "name": "v",
                  "type": "uint8"
                },
                {
                  "internalType": "bytes32",
                  "name": "r",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "s",
                  "type": "bytes32"
                }
              ],
              "internalType": "struct Signature",
              "name": "signature",
              "type": "tuple"
            },
            {
              "internalType": "address",
              "name": "attester",
              "type": "address"
            },
            {
              "internalType": "uint64",
              "name": "deadline",
              "type": "uint64"
            }
          ],
          "internalType": "struct DelegatedProxyAttestationRequest",
          "name": "delegatedRequest",
          "type": "tuple"
        }
      ],
      "name": "attestByDelegation",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "payable",
      "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": [],
      "name": "getAttestTypeHash",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "uid",
          "type": "bytes32"
        }
      ],
      "name": "getAttester",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getDomainSeparator",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getEAS",
      "outputs": [
        {
          "internalType": "contract IEAS",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getName",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getRevokeTypeHash",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "bytes32",
              "name": "schema",
              "type": "bytes32"
            },
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "recipient",
                  "type": "address"
                },
                {
                  "internalType": "uint64",
                  "name": "expirationTime",
                  "type": "uint64"
                },
                {
                  "internalType": "bool",
                  "name": "revocable",
                  "type": "bool"
                },
                {
                  "internalType": "bytes32",
                  "name": "refUID",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes",
                  "name": "data",
                  "type": "bytes"
                },
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "internalType": "struct AttestationRequestData[]",
              "name": "data",
              "type": "tuple[]"
            },
            {
              "components": [
                {
                  "internalType": "uint8",
                  "name": "v",
                  "type": "uint8"
                },
                {
                  "internalType": "bytes32",
                  "name": "r",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "s",
                  "type": "bytes32"
                }
              ],
              "internalType": "struct Signature[]",
              "name": "signatures",
              "type": "tuple[]"
            },
            {
              "internalType": "address",
              "name": "attester",
              "type": "address"
            },
            {
              "internalType": "uint64",
              "name": "deadline",
              "type": "uint64"
            }
          ],
          "internalType": "struct MultiDelegatedProxyAttestationRequest[]",
          "name": "multiDelegatedRequests",
          "type": "tuple[]"
        }
      ],
      "name": "multiAttestByDelegation",
      "outputs": [
        {
          "internalType": "bytes32[]",
          "name": "",
          "type": "bytes32[]"
        }
      ],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "bytes32",
              "name": "schema",
              "type": "bytes32"
            },
            {
              "components": [
                {
                  "internalType": "bytes32",
                  "name": "uid",
                  "type": "bytes32"
                },
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "internalType": "struct RevocationRequestData[]",
              "name": "data",
              "type": "tuple[]"
            },
            {
              "components": [
                {
                  "internalType": "uint8",
                  "name": "v",
                  "type": "uint8"
                },
                {
                  "internalType": "bytes32",
                  "name": "r",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "s",
                  "type": "bytes32"
                }
              ],
              "internalType": "struct Signature[]",
              "name": "signatures",
              "type": "tuple[]"
            },
            {
              "internalType": "address",
              "name": "revoker",
              "type": "address"
            },
            {
              "internalType": "uint64",
              "name": "deadline",
              "type": "uint64"
            }
          ],
          "internalType": "struct MultiDelegatedProxyRevocationRequest[]",
          "name": "multiDelegatedRequests",
          "type": "tuple[]"
        }
      ],
      "name": "multiRevokeByDelegation",
      "outputs": [],
      "stateMutability": "payable",
      "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": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "bytes32",
              "name": "schema",
              "type": "bytes32"
            },
            {
              "components": [
                {
                  "internalType": "bytes32",
                  "name": "uid",
                  "type": "bytes32"
                },
                {
                  "internalType": "uint256",
                  "name": "value",
                  "type": "uint256"
                }
              ],
              "internalType": "struct RevocationRequestData",
              "name": "data",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint8",
                  "name": "v",
                  "type": "uint8"
                },
                {
                  "internalType": "bytes32",
                  "name": "r",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "s",
                  "type": "bytes32"
                }
              ],
              "internalType": "struct Signature",
              "name": "signature",
              "type": "tuple"
            },
            {
              "internalType": "address",
              "name": "revoker",
              "type": "address"
            },
            {
              "internalType": "uint64",
              "name": "deadline",
              "type": "uint64"
            }
          ],
          "internalType": "struct DelegatedProxyRevocationRequest",
          "name": "delegatedRequest",
          "type": "tuple"
        }
      ],
      "name": "revokeByDelegation",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "version",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x6101e060405234801561001157600080fd5b506040516131f53803806131f5833981016040819052610030916102b6565b6040805180820190915260058152640312e342e360dc1b60208201526001608052600460a052600060c0819052339184918491829161007090839061019d565b6101805261007f81600161019d565b6101a05281516020808401919091206101405281519082012061016052466101005261010f6101405161016051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60e052505030610120526001600160a01b038216610140576040516341bc07ff60e11b815260040160405180910390fd5b6001600160a01b0382166101c052600261015a8282610413565b5050506001600160a01b03811661018c57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b610195816101d0565b505050610528565b60006020835110156101b9576101b2836101ec565b90506101ca565b816101c48482610413565b5060ff90505b92915050565b600680546001600160a01b03191690556101e98161022a565b50565b600080829050601f81511115610217578260405163305a27a960e01b815260040161018391906104d1565b805161022282610504565b179392505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156102ad578181015183820152602001610295565b50506000910152565b600080604083850312156102c957600080fd5b82516001600160a01b03811681146102e057600080fd5b60208401519092506001600160401b038111156102fc57600080fd5b8301601f8101851361030d57600080fd5b80516001600160401b038111156103265761032661027c565b604051601f8201601f19908116603f011681016001600160401b03811182821017156103545761035461027c565b60405281815282820160200187101561036c57600080fd5b61037d826020830160208601610292565b8093505050509250929050565b600181811c9082168061039e57607f821691505b6020821081036103be57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561040e57806000526020600020601f840160051c810160208510156103eb5750805b601f840160051c820191505b8181101561040b57600081556001016103f7565b50505b505050565b81516001600160401b0381111561042c5761042c61027c565b6104408161043a845461038a565b846103c4565b6020601f821160018114610474576000831561045c5750848201515b600019600385901b1c1916600184901b17845561040b565b600084815260208120601f198516915b828110156104a45787850151825560209485019460019092019101610484565b50848210156104c25786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b60208152600082518060208401526104f0816040850160208701610292565b601f01601f19169190910160400192915050565b805160208083015191908110156103be5760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c051612c2b6105ca6000396000818161022b015281816109cb01528181610a5101528181610f54015261112701526000610cfb01526000610cce015260006112f5015260006112cd01526000611228015260006112520152600061127c01526000610502015260006104d9015260006104b00152612c2b6000f3fe60806040526004361061010e5760003560e01c806379ba5097116100a5578063a6d4dbc711610074578063e30c397811610059578063e30c397814610332578063ed24911d1461035d578063f2fde38b1461037257600080fd5b8063a6d4dbc7146102ec578063b83010d3146102ff57600080fd5b806379ba50971461026457806384b0196e146102795780638da5cb5b146102a157806395411525146102cc57600080fd5b80633c042715116100e15780633c042715146101f457806354fd4d501461020757806365c40b9c1461021c578063715018a61461024f57600080fd5b80630eabf6601461011357806310d736d51461012857806312b11a171461019557806317d7de7c146101d2575b600080fd5b610126610121366004611de8565b610392565b005b34801561013457600080fd5b5061016b610143366004611e2a565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101a157600080fd5b507fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af15b60405190815260200161018c565b3480156101de57600080fd5b506101e76103f3565b60405161018c9190611eb1565b6101c4610202366004611ecb565b610485565b34801561021357600080fd5b506101e76104a9565b34801561022857600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061016b565b34801561025b57600080fd5b5061012661054c565b34801561027057600080fd5b50610126610560565b34801561028557600080fd5b5061028e6105dc565b60405161018c9796959493929190611f06565b3480156102ad57600080fd5b5060055473ffffffffffffffffffffffffffffffffffffffff1661016b565b6102df6102da366004611de8565b61063e565b60405161018c9190611fc7565b6101266102fa36600461200a565b61067c565b34801561030b57600080fd5b507f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d6101c4565b34801561033e57600080fd5b5060065473ffffffffffffffffffffffffffffffffffffffff1661016b565b34801561036957600080fd5b506101c4610698565b34801561037e57600080fd5b5061012661038d36600461204f565b6106a7565b8060005b818110156103e3576103db8484838181106103b3576103b361206a565b90506020028101906103c59190612099565b6103d690608081019060600161204f565b610757565b600101610396565b506103ee83836107ab565b505050565b606060028054610402906120d7565b80601f016020809104026020016040519081016040528092919081815260200182805461042e906120d7565b801561047b5780601f106104505761010080835404028352916020019161047b565b820191906000526020600020905b81548152906001019060200180831161045e57829003601f168201915b5050505050905090565b600061049a6103d660c0840160a0850161204f565b6104a382610a3a565b92915050565b60606104d47f0000000000000000000000000000000000000000000000000000000000000000610b85565b6104fd7f0000000000000000000000000000000000000000000000000000000000000000610b85565b6105267f0000000000000000000000000000000000000000000000000000000000000000610b85565b6040516020016105389392919061212a565b604051602081830303815290604052905090565b610554610c43565b61055e6000610c96565b565b600654339073ffffffffffffffffffffffffffffffffffffffff1681146105d0576040517f118cdaa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024015b60405180910390fd5b6105d981610c96565b50565b6000606080600080600060606105f0610cc7565b6105f8610cf4565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160005b81811015610669576106618585838181106103b3576103b361206a565b600101610644565b506106748484610d21565b949350505050565b61068f6103d660e0830160c0840161204f565b6105d98161110e565b60006106a261120e565b905090565b6106af610c43565b6006805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915561071260055473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60055473ffffffffffffffffffffffffffffffffffffffff8281169116146105d9576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060008167ffffffffffffffff8111156107c7576107c76121c1565b60405190808252806020026020018201604052801561080d57816020015b6040805180820190915260008152606060208201528152602001906001900390816107e55790505b50905060005b8281101561098d57600085858381811061082f5761082f61206a565b90506020028101906108419190612099565b61084a906123f6565b602081015180519192509080158061086757508260400151518114155b1561089e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156109485760008382815181106108bd576108bd61206a565b6020026020010151905061093f6040518060a0016040528087600001518152602001838152602001876040015185815181106108fb576108fb61206a565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250611346565b506001016108a1565b50604051806040016040528084600001518152602001838152508585815181106109745761097461206a565b6020026020010181905250505050806001019050610813565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610a029085906004016124f7565b6000604051808303818588803b158015610a1b57600080fd5b505af1158015610a2f573d6000803e3d6000fd5b505050505050505050565b6000610a4d610a48836126f4565b6115bc565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e734604051806040016040528087600001358152602001878060200190610ab1919061276d565b610aba906127a1565b8152506040518363ffffffff1660e01b8152600401610ad99190612820565b60206040518083038185885af1158015610af7573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610b1c9190612845565b9050610b2e60c0840160a0850161204f565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606000610b928361179e565b600101905060008167ffffffffffffffff811115610bb257610bb26121c1565b6040519080825280601f01601f191660200182016040528015610bdc576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084610be657509392505050565b60055473ffffffffffffffffffffffffffffffffffffffff16331461055e576040517f118cdaa70000000000000000000000000000000000000000000000000000000081523360048201526024016105c7565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001690556105d981611880565b60606106a27f000000000000000000000000000000000000000000000000000000000000000060006118f7565b60606106a27f000000000000000000000000000000000000000000000000000000000000000060016118f7565b60608160008167ffffffffffffffff811115610d3f57610d3f6121c1565b604051908082528060200260200182016040528015610d8557816020015b604080518082019091526000815260606020820152815260200190600190039081610d5d5790505b50905060005b82811015610f4f5736868683818110610da657610da661206a565b9050602002810190610db89190612099565b9050366000610dca602084018461285e565b909250905080801580610deb5750610de560408501856128c6565b90508114155b15610e22576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610f0357610efb6040518060a0016040528087600001358152602001868685818110610e5757610e5761206a565b9050602002810190610e69919061276d565b610e72906127a1565b8152602001610e8460408901896128c6565b85818110610e9457610e9461206a565b905060600201803603810190610eaa919061292d565b8152602001610ebf6080890160608a0161204f565b73ffffffffffffffffffffffffffffffffffffffff168152602001610eea60a0890160808a01612949565b67ffffffffffffffff1690526115bc565b600101610e25565b50604080518082019091528435815260208101610f208486612964565b815250868681518110610f3557610f3561206a565b602002602001018190525050505050806001019050610d8b565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610fac91906129ca565b60006040518083038185885af1158015610fca573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526110119190810190612abd565b90506000805b8481101561110257368888838181106110325761103261206a565b90506020028101906110449190612099565b9050366000611056602084018461285e565b90925090508060005b818110156110f257611077608086016060870161204f565b600360008a8a8151811061108d5761108d61206a565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555086600101965080600101905061105f565b5050505050806001019050611017565b50909695505050505050565b61112561112036839003830183612b53565b611346565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166346926267346040518060400160405280856000013581526020018560200180360381019061118b9190612bc1565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b1580156111f257600080fd5b505af1158015611206573d6000803e3d6000fd5b505050505050565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561127457507f000000000000000000000000000000000000000000000000000000000000000046145b1561129e57507f000000000000000000000000000000000000000000000000000000000000000090565b6106a2604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b608081015167ffffffffffffffff161580159061137a57504267ffffffffffffffff16816080015167ffffffffffffffff16105b156113b1576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680611416576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826060015173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461147f576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604083015161148d816119a2565b606080850151855185516020808801516080808b0151604080517f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d9581019590955273ffffffffffffffffffffffffffffffffffffffff90971696840196909652958201939093529384015260a083015267ffffffffffffffff1660c08201526000906115339060e0015b60405160208183030381529060405280519060200120611ab0565b9050846060015173ffffffffffffffffffffffffffffffffffffffff1661156882846000015185602001518660400151611af8565b73ffffffffffffffffffffffffffffffffffffffff16146115b5576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff16158015906115f057504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611627576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020810151604082015161163a816119a2565b60006117167fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af160001b8560600151866000015186600001518760200151886040015189606001518a60800151805190602001208b60a001518d608001516040516020016115189a99989796959493929190998a5273ffffffffffffffffffffffffffffffffffffffff98891660208b015260408a019790975294909616606088015267ffffffffffffffff928316608088015290151560a087015260c086015260e0850193909352610100840152166101208201526101400190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661174b82846000015185602001518660400151611af8565b73ffffffffffffffffffffffffffffffffffffffff1614611798576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106117e7577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611813576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061183157662386f26fc10000830492506010015b6305f5e1008310611849576305f5e100830492506008015b612710831061185d57612710830492506004015b6064831061186f576064830492506002015b600a83106104a35760010192915050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b606060ff83146119115761190a83611b1a565b90506104a3565b81805461191d906120d7565b80601f0160208091040260200160405190810160405280929190818152602001828054611949906120d7565b80156119965780601f1061196b57610100808354040283529160200191611996565b820191906000526020600020905b81548152906001019060200180831161197957829003601f168201915b505050505090506104a3565b8051602080830151604080850151905160f89490941b7fff000000000000000000000000000000000000000000000000000000000000001692840192909252602183015260418201526000906061016040516020818303038152906040529050600481604051611a129190612bdd565b9081526040519081900360200190205460ff1615611a5c576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600482604051611a6e9190612bdd565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b60006104a3611abd61120e565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b600080600080611b0a88888888611b59565b9250925092506111028282611c53565b60606000611b2783611d5b565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115611b945750600091506003905082611c49565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015611be8573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116611c3f57506000925060019150829050611c49565b9250600091508190505b9450945094915050565b6000826003811115611c6757611c67612bef565b03611c70575050565b6001826003811115611c8457611c84612bef565b03611cbb576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002826003811115611ccf57611ccf612bef565b03611d09576040517ffce698f7000000000000000000000000000000000000000000000000000000008152600481018290526024016105c7565b6003826003811115611d1d57611d1d612bef565b03611d57576040517fd78bce0c000000000000000000000000000000000000000000000000000000008152600481018290526024016105c7565b5050565b600060ff8216601f8111156104a3576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f840112611dae57600080fd5b50813567ffffffffffffffff811115611dc657600080fd5b6020830191508360208260051b8501011115611de157600080fd5b9250929050565b60008060208385031215611dfb57600080fd5b823567ffffffffffffffff811115611e1257600080fd5b611e1e85828601611d9c565b90969095509350505050565b600060208284031215611e3c57600080fd5b5035919050565b60005b83811015611e5e578181015183820152602001611e46565b50506000910152565b60008151808452611e7f816020860160208601611e43565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611ec46020830184611e67565b9392505050565b600060208284031215611edd57600080fd5b813567ffffffffffffffff811115611ef457600080fd5b820160e08185031215611ec457600080fd5b7fff000000000000000000000000000000000000000000000000000000000000008816815260e060208201526000611f4160e0830189611e67565b8281036040840152611f538189611e67565b6060840188905273ffffffffffffffffffffffffffffffffffffffff8716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b81811015611fb6578351835260209384019390920191600101611f98565b50909b9a5050505050505050505050565b602080825282518282018190526000918401906040840190835b81811015611fff578351835260209384019390920191600101611fe1565b509095945050505050565b600061010082840312801561201e57600080fd5b509092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461204a57600080fd5b919050565b60006020828403121561206157600080fd5b611ec482612026565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff618336030181126120cd57600080fd5b9190910192915050565b600181811c908216806120eb57607f821691505b602082108103612124577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000845161213c818460208901611e43565b7f2e000000000000000000000000000000000000000000000000000000000000009083019081528451612176816001840160208901611e43565b7f2e000000000000000000000000000000000000000000000000000000000000006001929091019182015283516121b4816002840160208801611e43565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715612213576122136121c1565b60405290565b60405160c0810167ffffffffffffffff81118282101715612213576122136121c1565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612283576122836121c1565b604052919050565b600067ffffffffffffffff8211156122a5576122a56121c1565b5060051b60200190565b6000604082840312156122c157600080fd5b6040805190810167ffffffffffffffff811182821017156122e4576122e46121c1565b604052823581526020928301359281019290925250919050565b60006060828403121561231057600080fd5b6040516060810167ffffffffffffffff81118282101715612333576123336121c1565b604052905080823560ff8116811461234a57600080fd5b815260208381013590820152604092830135920191909152919050565b600082601f83011261237857600080fd5b813561238b6123868261228b565b61223c565b808282526020820191506020606084028601019250858311156123ad57600080fd5b602085015b838110156123d4576123c487826122fe565b83526020909201916060016123b2565b5095945050505050565b803567ffffffffffffffff8116811461204a57600080fd5b600060a0823603121561240857600080fd5b6124106121f0565b82358152602083013567ffffffffffffffff81111561242e57600080fd5b830136601f82011261243f57600080fd5b803561244d6123868261228b565b8082825260208201915060208360061b85010192503683111561246f57600080fd5b6020840193505b8284101561249b5761248836856122af565b8252602082019150604084019350612476565b6020850152505050604083013567ffffffffffffffff8111156124bd57600080fd5b6124c936828601612367565b6040830152506124db60608401612026565b60608201526124ec608084016123de565b608082015292915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156125c2578685037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00184528151805186526020908101516040828801819052815190880181905291019060009060608801905b808310156125aa5761259382855180518252602090810151910152565b604082019150602084019350600183019250612576565b5096505050602093840193919091019060010161251f565b50929695505050505050565b600082601f8301126125df57600080fd5b813567ffffffffffffffff8111156125f9576125f96121c1565b61262a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161223c565b81815284602083860101111561263f57600080fd5b816020850160208301376000918101602001919091529392505050565b600060c0828403121561266e57600080fd5b612676612219565b905061268182612026565b815261268f602083016123de565b6020820152604082013580151581146126a757600080fd5b604082015260608281013590820152608082013567ffffffffffffffff8111156126d057600080fd5b6126dc848285016125ce565b60808301525060a09182013591810191909152919050565b600060e0823603121561270657600080fd5b61270e6121f0565b82358152602083013567ffffffffffffffff81111561272c57600080fd5b6127383682860161265c565b60208301525061274b36604085016122fe565b604082015261275c60a08401612026565b60608201526124ec60c084016123de565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff418336030181126120cd57600080fd5b60006104a3368361265c565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261280c60c0850182611e67565b60a093840151949093019390935250919050565b60208152815160208201526000602083015160408084015261067460608401826127ad565b60006020828403121561285757600080fd5b5051919050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261289357600080fd5b83018035915067ffffffffffffffff8211156128ae57600080fd5b6020019150600581901b3603821315611de157600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126128fb57600080fd5b83018035915067ffffffffffffffff82111561291657600080fd5b6020019150606081023603821315611de157600080fd5b60006060828403121561293f57600080fd5b611ec483836122fe565b60006020828403121561295b57600080fd5b611ec4826123de565b60006129726123868461228b565b8381526020810190600585901b84013681111561298e57600080fd5b845b81811015611fff57803567ffffffffffffffff8111156129af57600080fd5b6129bb3682890161265c565b85525060209384019301612990565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156125c2577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180518652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015612aa3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352612a8d8486516127ad565b6020958601959094509290920191600101612a53565b5091975050506020948501949290920191506001016129f2565b600060208284031215612acf57600080fd5b815167ffffffffffffffff811115612ae657600080fd5b8201601f81018413612af757600080fd5b8051612b056123868261228b565b8082825260208201915060208360051b850101925086831115612b2757600080fd5b6020840193505b82841015612b49578351825260209384019390910190612b2e565b9695505050505050565b6000610100828403128015612b6757600080fd5b50612b706121f0565b82358152612b8184602085016122af565b6020820152612b9384606085016122fe565b6040820152612ba460c08401612026565b6060820152612bb560e084016123de565b60808201529392505050565b600060408284031215612bd357600080fd5b611ec483836122af565b600082516120cd818460208701611e43565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300081d000a",
  "deployedBytecode": "0x60806040526004361061010e5760003560e01c806379ba5097116100a5578063a6d4dbc711610074578063e30c397811610059578063e30c397814610332578063ed24911d1461035d578063f2fde38b1461037257600080fd5b8063a6d4dbc7146102ec578063b83010d3146102ff57600080fd5b806379ba50971461026457806384b0196e146102795780638da5cb5b146102a157806395411525146102cc57600080fd5b80633c042715116100e15780633c042715146101f457806354fd4d501461020757806365c40b9c1461021c578063715018a61461024f57600080fd5b80630eabf6601461011357806310d736d51461012857806312b11a171461019557806317d7de7c146101d2575b600080fd5b610126610121366004611de8565b610392565b005b34801561013457600080fd5b5061016b610143366004611e2a565b60009081526003602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101a157600080fd5b507fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af15b60405190815260200161018c565b3480156101de57600080fd5b506101e76103f3565b60405161018c9190611eb1565b6101c4610202366004611ecb565b610485565b34801561021357600080fd5b506101e76104a9565b34801561022857600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061016b565b34801561025b57600080fd5b5061012661054c565b34801561027057600080fd5b50610126610560565b34801561028557600080fd5b5061028e6105dc565b60405161018c9796959493929190611f06565b3480156102ad57600080fd5b5060055473ffffffffffffffffffffffffffffffffffffffff1661016b565b6102df6102da366004611de8565b61063e565b60405161018c9190611fc7565b6101266102fa36600461200a565b61067c565b34801561030b57600080fd5b507f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d6101c4565b34801561033e57600080fd5b5060065473ffffffffffffffffffffffffffffffffffffffff1661016b565b34801561036957600080fd5b506101c4610698565b34801561037e57600080fd5b5061012661038d36600461204f565b6106a7565b8060005b818110156103e3576103db8484838181106103b3576103b361206a565b90506020028101906103c59190612099565b6103d690608081019060600161204f565b610757565b600101610396565b506103ee83836107ab565b505050565b606060028054610402906120d7565b80601f016020809104026020016040519081016040528092919081815260200182805461042e906120d7565b801561047b5780601f106104505761010080835404028352916020019161047b565b820191906000526020600020905b81548152906001019060200180831161045e57829003601f168201915b5050505050905090565b600061049a6103d660c0840160a0850161204f565b6104a382610a3a565b92915050565b60606104d47f0000000000000000000000000000000000000000000000000000000000000000610b85565b6104fd7f0000000000000000000000000000000000000000000000000000000000000000610b85565b6105267f0000000000000000000000000000000000000000000000000000000000000000610b85565b6040516020016105389392919061212a565b604051602081830303815290604052905090565b610554610c43565b61055e6000610c96565b565b600654339073ffffffffffffffffffffffffffffffffffffffff1681146105d0576040517f118cdaa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024015b60405180910390fd5b6105d981610c96565b50565b6000606080600080600060606105f0610cc7565b6105f8610cf4565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b60608160005b81811015610669576106618585838181106103b3576103b361206a565b600101610644565b506106748484610d21565b949350505050565b61068f6103d660e0830160c0840161204f565b6105d98161110e565b60006106a261120e565b905090565b6106af610c43565b6006805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915561071260055473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60055473ffffffffffffffffffffffffffffffffffffffff8281169116146105d9576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060008167ffffffffffffffff8111156107c7576107c76121c1565b60405190808252806020026020018201604052801561080d57816020015b6040805180820190915260008152606060208201528152602001906001900390816107e55790505b50905060005b8281101561098d57600085858381811061082f5761082f61206a565b90506020028101906108419190612099565b61084a906123f6565b602081015180519192509080158061086757508260400151518114155b1561089e576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156109485760008382815181106108bd576108bd61206a565b6020026020010151905061093f6040518060a0016040528087600001518152602001838152602001876040015185815181106108fb576108fb61206a565b60200260200101518152602001876060015173ffffffffffffffffffffffffffffffffffffffff168152602001876080015167ffffffffffffffff16815250611346565b506001016108a1565b50604051806040016040528084600001518152602001838152508585815181106109745761097461206a565b6020026020010181905250505050806001019050610813565b506040517f4cb7e9e500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690634cb7e9e5903490610a029085906004016124f7565b6000604051808303818588803b158015610a1b57600080fd5b505af1158015610a2f573d6000803e3d6000fd5b505050505050505050565b6000610a4d610a48836126f4565b6115bc565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f17325e734604051806040016040528087600001358152602001878060200190610ab1919061276d565b610aba906127a1565b8152506040518363ffffffff1660e01b8152600401610ad99190612820565b60206040518083038185885af1158015610af7573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610b1c9190612845565b9050610b2e60c0840160a0850161204f565b600082815260036020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905592915050565b60606000610b928361179e565b600101905060008167ffffffffffffffff811115610bb257610bb26121c1565b6040519080825280601f01601f191660200182016040528015610bdc576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084610be657509392505050565b60055473ffffffffffffffffffffffffffffffffffffffff16331461055e576040517f118cdaa70000000000000000000000000000000000000000000000000000000081523360048201526024016105c7565b600680547fffffffffffffffffffffffff00000000000000000000000000000000000000001690556105d981611880565b60606106a27f000000000000000000000000000000000000000000000000000000000000000060006118f7565b60606106a27f000000000000000000000000000000000000000000000000000000000000000060016118f7565b60608160008167ffffffffffffffff811115610d3f57610d3f6121c1565b604051908082528060200260200182016040528015610d8557816020015b604080518082019091526000815260606020820152815260200190600190039081610d5d5790505b50905060005b82811015610f4f5736868683818110610da657610da661206a565b9050602002810190610db89190612099565b9050366000610dca602084018461285e565b909250905080801580610deb5750610de560408501856128c6565b90508114155b15610e22576040517f947d5a8400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610f0357610efb6040518060a0016040528087600001358152602001868685818110610e5757610e5761206a565b9050602002810190610e69919061276d565b610e72906127a1565b8152602001610e8460408901896128c6565b85818110610e9457610e9461206a565b905060600201803603810190610eaa919061292d565b8152602001610ebf6080890160608a0161204f565b73ffffffffffffffffffffffffffffffffffffffff168152602001610eea60a0890160808a01612949565b67ffffffffffffffff1690526115bc565b600101610e25565b50604080518082019091528435815260208101610f208486612964565b815250868681518110610f3557610f3561206a565b602002602001018190525050505050806001019050610d8b565b5060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166344adc90e34846040518363ffffffff1660e01b8152600401610fac91906129ca565b60006040518083038185885af1158015610fca573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526110119190810190612abd565b90506000805b8481101561110257368888838181106110325761103261206a565b90506020028101906110449190612099565b9050366000611056602084018461285e565b90925090508060005b818110156110f257611077608086016060870161204f565b600360008a8a8151811061108d5761108d61206a565b6020026020010151815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555086600101965080600101905061105f565b5050505050806001019050611017565b50909695505050505050565b61112561112036839003830183612b53565b611346565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166346926267346040518060400160405280856000013581526020018560200180360381019061118b9190612bc1565b90526040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815281516004820152602091820151805160248301529091015160448201526064016000604051808303818588803b1580156111f257600080fd5b505af1158015611206573d6000803e3d6000fd5b505050505050565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614801561127457507f000000000000000000000000000000000000000000000000000000000000000046145b1561129e57507f000000000000000000000000000000000000000000000000000000000000000090565b6106a2604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b608081015167ffffffffffffffff161580159061137a57504267ffffffffffffffff16816080015167ffffffffffffffff16105b156113b1576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015180516000908152600390925260409091205473ffffffffffffffffffffffffffffffffffffffff1680611416576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826060015173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461147f576040517f4ca8886700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604083015161148d816119a2565b606080850151855185516020808801516080808b0151604080517f78a69a78c1a55cdff5cbf949580b410778cd9e4d1ecbe6f06a7fa8dc2441b57d9581019590955273ffffffffffffffffffffffffffffffffffffffff90971696840196909652958201939093529384015260a083015267ffffffffffffffff1660c08201526000906115339060e0015b60405160208183030381529060405280519060200120611ab0565b9050846060015173ffffffffffffffffffffffffffffffffffffffff1661156882846000015185602001518660400151611af8565b73ffffffffffffffffffffffffffffffffffffffff16146115b5576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b608081015167ffffffffffffffff16158015906115f057504267ffffffffffffffff16816080015167ffffffffffffffff16105b15611627576040517f1ab7da6b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020810151604082015161163a816119a2565b60006117167fea02ffba7dcb45f6fc649714d23f315eef12e3b27f9a7735d8d8bf41eb2b1af160001b8560600151866000015186600001518760200151886040015189606001518a60800151805190602001208b60a001518d608001516040516020016115189a99989796959493929190998a5273ffffffffffffffffffffffffffffffffffffffff98891660208b015260408a019790975294909616606088015267ffffffffffffffff928316608088015290151560a087015260c086015260e0850193909352610100840152166101208201526101400190565b9050836060015173ffffffffffffffffffffffffffffffffffffffff1661174b82846000015185602001518660400151611af8565b73ffffffffffffffffffffffffffffffffffffffff1614611798576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000083106117e7577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611813576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061183157662386f26fc10000830492506010015b6305f5e1008310611849576305f5e100830492506008015b612710831061185d57612710830492506004015b6064831061186f576064830492506002015b600a83106104a35760010192915050565b6005805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b606060ff83146119115761190a83611b1a565b90506104a3565b81805461191d906120d7565b80601f0160208091040260200160405190810160405280929190818152602001828054611949906120d7565b80156119965780601f1061196b57610100808354040283529160200191611996565b820191906000526020600020905b81548152906001019060200180831161197957829003601f168201915b505050505090506104a3565b8051602080830151604080850151905160f89490941b7fff000000000000000000000000000000000000000000000000000000000000001692840192909252602183015260418201526000906061016040516020818303038152906040529050600481604051611a129190612bdd565b9081526040519081900360200190205460ff1615611a5c576040517fcce9a82400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600482604051611a6e9190612bdd565b90815260405190819003602001902080549115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009092169190911790555050565b60006104a3611abd61120e565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b600080600080611b0a88888888611b59565b9250925092506111028282611c53565b60606000611b2783611d5b565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115611b945750600091506003905082611c49565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015611be8573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116611c3f57506000925060019150829050611c49565b9250600091508190505b9450945094915050565b6000826003811115611c6757611c67612bef565b03611c70575050565b6001826003811115611c8457611c84612bef565b03611cbb576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002826003811115611ccf57611ccf612bef565b03611d09576040517ffce698f7000000000000000000000000000000000000000000000000000000008152600481018290526024016105c7565b6003826003811115611d1d57611d1d612bef565b03611d57576040517fd78bce0c000000000000000000000000000000000000000000000000000000008152600481018290526024016105c7565b5050565b600060ff8216601f8111156104a3576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008083601f840112611dae57600080fd5b50813567ffffffffffffffff811115611dc657600080fd5b6020830191508360208260051b8501011115611de157600080fd5b9250929050565b60008060208385031215611dfb57600080fd5b823567ffffffffffffffff811115611e1257600080fd5b611e1e85828601611d9c565b90969095509350505050565b600060208284031215611e3c57600080fd5b5035919050565b60005b83811015611e5e578181015183820152602001611e46565b50506000910152565b60008151808452611e7f816020860160208601611e43565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611ec46020830184611e67565b9392505050565b600060208284031215611edd57600080fd5b813567ffffffffffffffff811115611ef457600080fd5b820160e08185031215611ec457600080fd5b7fff000000000000000000000000000000000000000000000000000000000000008816815260e060208201526000611f4160e0830189611e67565b8281036040840152611f538189611e67565b6060840188905273ffffffffffffffffffffffffffffffffffffffff8716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b81811015611fb6578351835260209384019390920191600101611f98565b50909b9a5050505050505050505050565b602080825282518282018190526000918401906040840190835b81811015611fff578351835260209384019390920191600101611fe1565b509095945050505050565b600061010082840312801561201e57600080fd5b509092915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461204a57600080fd5b919050565b60006020828403121561206157600080fd5b611ec482612026565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff618336030181126120cd57600080fd5b9190910192915050565b600181811c908216806120eb57607f821691505b602082108103612124577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000845161213c818460208901611e43565b7f2e000000000000000000000000000000000000000000000000000000000000009083019081528451612176816001840160208901611e43565b7f2e000000000000000000000000000000000000000000000000000000000000006001929091019182015283516121b4816002840160208801611e43565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715612213576122136121c1565b60405290565b60405160c0810167ffffffffffffffff81118282101715612213576122136121c1565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612283576122836121c1565b604052919050565b600067ffffffffffffffff8211156122a5576122a56121c1565b5060051b60200190565b6000604082840312156122c157600080fd5b6040805190810167ffffffffffffffff811182821017156122e4576122e46121c1565b604052823581526020928301359281019290925250919050565b60006060828403121561231057600080fd5b6040516060810167ffffffffffffffff81118282101715612333576123336121c1565b604052905080823560ff8116811461234a57600080fd5b815260208381013590820152604092830135920191909152919050565b600082601f83011261237857600080fd5b813561238b6123868261228b565b61223c565b808282526020820191506020606084028601019250858311156123ad57600080fd5b602085015b838110156123d4576123c487826122fe565b83526020909201916060016123b2565b5095945050505050565b803567ffffffffffffffff8116811461204a57600080fd5b600060a0823603121561240857600080fd5b6124106121f0565b82358152602083013567ffffffffffffffff81111561242e57600080fd5b830136601f82011261243f57600080fd5b803561244d6123868261228b565b8082825260208201915060208360061b85010192503683111561246f57600080fd5b6020840193505b8284101561249b5761248836856122af565b8252602082019150604084019350612476565b6020850152505050604083013567ffffffffffffffff8111156124bd57600080fd5b6124c936828601612367565b6040830152506124db60608401612026565b60608201526124ec608084016123de565b608082015292915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156125c2578685037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00184528151805186526020908101516040828801819052815190880181905291019060009060608801905b808310156125aa5761259382855180518252602090810151910152565b604082019150602084019350600183019250612576565b5096505050602093840193919091019060010161251f565b50929695505050505050565b600082601f8301126125df57600080fd5b813567ffffffffffffffff8111156125f9576125f96121c1565b61262a60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161223c565b81815284602083860101111561263f57600080fd5b816020850160208301376000918101602001919091529392505050565b600060c0828403121561266e57600080fd5b612676612219565b905061268182612026565b815261268f602083016123de565b6020820152604082013580151581146126a757600080fd5b604082015260608281013590820152608082013567ffffffffffffffff8111156126d057600080fd5b6126dc848285016125ce565b60808301525060a09182013591810191909152919050565b600060e0823603121561270657600080fd5b61270e6121f0565b82358152602083013567ffffffffffffffff81111561272c57600080fd5b6127383682860161265c565b60208301525061274b36604085016122fe565b604082015261275c60a08401612026565b60608201526124ec60c084016123de565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff418336030181126120cd57600080fd5b60006104a3368361265c565b73ffffffffffffffffffffffffffffffffffffffff815116825267ffffffffffffffff6020820151166020830152604081015115156040830152606081015160608301526000608082015160c0608085015261280c60c0850182611e67565b60a093840151949093019390935250919050565b60208152815160208201526000602083015160408084015261067460608401826127ad565b60006020828403121561285757600080fd5b5051919050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261289357600080fd5b83018035915067ffffffffffffffff8211156128ae57600080fd5b6020019150600581901b3603821315611de157600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126128fb57600080fd5b83018035915067ffffffffffffffff82111561291657600080fd5b6020019150606081023603821315611de157600080fd5b60006060828403121561293f57600080fd5b611ec483836122fe565b60006020828403121561295b57600080fd5b611ec4826123de565b60006129726123868461228b565b8381526020810190600585901b84013681111561298e57600080fd5b845b81811015611fff57803567ffffffffffffffff8111156129af57600080fd5b6129bb3682890161265c565b85525060209384019301612990565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b828110156125c2577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0878603018452815180518652602090810151604082880181905281519088018190529101906060600582901b88018101919088019060005b81811015612aa3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a8503018352612a8d8486516127ad565b6020958601959094509290920191600101612a53565b5091975050506020948501949290920191506001016129f2565b600060208284031215612acf57600080fd5b815167ffffffffffffffff811115612ae657600080fd5b8201601f81018413612af757600080fd5b8051612b056123868261228b565b8082825260208201915060208360051b850101925086831115612b2757600080fd5b6020840193505b82841015612b49578351825260209384019390910190612b2e565b9695505050505050565b6000610100828403128015612b6757600080fd5b50612b706121f0565b82358152612b8184602085016122af565b6020820152612b9384606085016122fe565b6040820152612ba460c08401612026565b6060820152612bb560e084016123de565b60808201529392505050565b600060408284031215612bd357600080fd5b611ec483836122af565b600082516120cd818460208701611e43565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300081d000a",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
