{
  "_format": "hh-sol-artifact-1",
  "contractName": "AxelarAmplifierGateway",
  "sourceName": "contracts/gateway/AxelarAmplifierGateway.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "previousSignersRetention_",
          "type": "uint256"
        },
        {
          "internalType": "bytes32",
          "name": "domainSeparator_",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "minimumRotationDelay_",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "signersHash",
          "type": "bytes32"
        }
      ],
      "name": "DuplicateSigners",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "minimumRotationDelay",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "lastRotationTimestamp",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "timeElapsed",
          "type": "uint256"
        }
      ],
      "name": "InsufficientRotationDelay",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidCodeHash",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidImplementation",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidMessages",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidOwner",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidOwnerAddress",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidS",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "InvalidSender",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidSignature",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidSignatureLength",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidSigners",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidThreshold",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidV",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidWeights",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "LowSignaturesWeight",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "MalformedSignatures",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NotLatestSigners",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NotOwner",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NotPaused",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "NotProxy",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "Pause",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "required",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "provided",
          "type": "uint256"
        }
      ],
      "name": "RedundantSignaturesProvided",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "SetupFailed",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "destinationChain",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "destinationContractAddress",
          "type": "string"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "payloadHash",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "payload",
          "type": "bytes"
        }
      ],
      "name": "ContractCall",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "commandId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "sourceChain",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "messageId",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "sourceAddress",
          "type": "string"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "contractAddress",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "payloadHash",
          "type": "bytes32"
        }
      ],
      "name": "MessageApproved",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "commandId",
          "type": "bytes32"
        }
      ],
      "name": "MessageExecuted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "newOperator",
          "type": "address"
        }
      ],
      "name": "OperatorshipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferStarted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Paused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "epoch",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "signersHash",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "signers",
          "type": "bytes"
        }
      ],
      "name": "SignersRotated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Unpaused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "newImplementation",
          "type": "address"
        }
      ],
      "name": "Upgraded",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "acceptOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "string",
              "name": "sourceChain",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "messageId",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "sourceAddress",
              "type": "string"
            },
            {
              "internalType": "address",
              "name": "contractAddress",
              "type": "address"
            },
            {
              "internalType": "bytes32",
              "name": "payloadHash",
              "type": "bytes32"
            }
          ],
          "internalType": "struct Message[]",
          "name": "messages",
          "type": "tuple[]"
        },
        {
          "components": [
            {
              "components": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "signer",
                      "type": "address"
                    },
                    {
                      "internalType": "uint128",
                      "name": "weight",
                      "type": "uint128"
                    }
                  ],
                  "internalType": "struct WeightedSigner[]",
                  "name": "signers",
                  "type": "tuple[]"
                },
                {
                  "internalType": "uint128",
                  "name": "threshold",
                  "type": "uint128"
                },
                {
                  "internalType": "bytes32",
                  "name": "nonce",
                  "type": "bytes32"
                }
              ],
              "internalType": "struct WeightedSigners",
              "name": "signers",
              "type": "tuple"
            },
            {
              "internalType": "bytes[]",
              "name": "signatures",
              "type": "bytes[]"
            }
          ],
          "internalType": "struct Proof",
          "name": "proof",
          "type": "tuple"
        }
      ],
      "name": "approveMessages",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "destinationChain",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "destinationContractAddress",
          "type": "string"
        },
        {
          "internalType": "bytes",
          "name": "payload",
          "type": "bytes"
        }
      ],
      "name": "callContract",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "contractId",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "domainSeparator",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "epoch",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "signersHash",
          "type": "bytes32"
        }
      ],
      "name": "epochBySignersHash",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "implementation",
      "outputs": [
        {
          "internalType": "address",
          "name": "implementation_",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "commandId",
          "type": "bytes32"
        }
      ],
      "name": "isCommandExecuted",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "commandId",
          "type": "bytes32"
        },
        {
          "internalType": "string",
          "name": "sourceChain",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "sourceAddress",
          "type": "string"
        },
        {
          "internalType": "address",
          "name": "contractAddress",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "payloadHash",
          "type": "bytes32"
        }
      ],
      "name": "isContractCallApproved",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "sourceChain",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "messageId",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "sourceAddress",
          "type": "string"
        },
        {
          "internalType": "address",
          "name": "contractAddress",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "payloadHash",
          "type": "bytes32"
        }
      ],
      "name": "isMessageApproved",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "sourceChain",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "messageId",
          "type": "string"
        }
      ],
      "name": "isMessageExecuted",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "lastRotationTimestamp",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "signersHash",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "dataHash",
          "type": "bytes32"
        }
      ],
      "name": "messageHashToSign",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "sourceChain",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "messageId",
          "type": "string"
        }
      ],
      "name": "messageToCommandId",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "minimumRotationDelay",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "operator",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "owner_",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "paused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "paused_",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pendingOwner",
      "outputs": [
        {
          "internalType": "address",
          "name": "owner_",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "previousSignersRetention",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "proposeOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "components": [
                {
                  "internalType": "address",
                  "name": "signer",
                  "type": "address"
                },
                {
                  "internalType": "uint128",
                  "name": "weight",
                  "type": "uint128"
                }
              ],
              "internalType": "struct WeightedSigner[]",
              "name": "signers",
              "type": "tuple[]"
            },
            {
              "internalType": "uint128",
              "name": "threshold",
              "type": "uint128"
            },
            {
              "internalType": "bytes32",
              "name": "nonce",
              "type": "bytes32"
            }
          ],
          "internalType": "struct WeightedSigners",
          "name": "newSigners",
          "type": "tuple"
        },
        {
          "components": [
            {
              "components": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "signer",
                      "type": "address"
                    },
                    {
                      "internalType": "uint128",
                      "name": "weight",
                      "type": "uint128"
                    }
                  ],
                  "internalType": "struct WeightedSigner[]",
                  "name": "signers",
                  "type": "tuple[]"
                },
                {
                  "internalType": "uint128",
                  "name": "threshold",
                  "type": "uint128"
                },
                {
                  "internalType": "bytes32",
                  "name": "nonce",
                  "type": "bytes32"
                }
              ],
              "internalType": "struct WeightedSigners",
              "name": "signers",
              "type": "tuple"
            },
            {
              "internalType": "bytes[]",
              "name": "signatures",
              "type": "bytes[]"
            }
          ],
          "internalType": "struct Proof",
          "name": "proof",
          "type": "tuple"
        }
      ],
      "name": "rotateSigners",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bool",
          "name": "isPaused",
          "type": "bool"
        }
      ],
      "name": "setPauseStatus",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "setup",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "signerEpoch",
          "type": "uint256"
        }
      ],
      "name": "signersHashByEpoch",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "timeSinceRotation",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOperator",
          "type": "address"
        }
      ],
      "name": "transferOperatorship",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newImplementation",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "newImplementationCodeHash",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "params",
          "type": "bytes"
        }
      ],
      "name": "upgrade",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "commandId",
          "type": "bytes32"
        },
        {
          "internalType": "string",
          "name": "sourceChain",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "sourceAddress",
          "type": "string"
        },
        {
          "internalType": "bytes32",
          "name": "payloadHash",
          "type": "bytes32"
        }
      ],
      "name": "validateContractCall",
      "outputs": [
        {
          "internalType": "bool",
          "name": "valid",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "sourceChain",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "messageId",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "sourceAddress",
          "type": "string"
        },
        {
          "internalType": "bytes32",
          "name": "payloadHash",
          "type": "bytes32"
        }
      ],
      "name": "validateMessage",
      "outputs": [
        {
          "internalType": "bool",
          "name": "valid",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "dataHash",
          "type": "bytes32"
        },
        {
          "components": [
            {
              "components": [
                {
                  "components": [
                    {
                      "internalType": "address",
                      "name": "signer",
                      "type": "address"
                    },
                    {
                      "internalType": "uint128",
                      "name": "weight",
                      "type": "uint128"
                    }
                  ],
                  "internalType": "struct WeightedSigner[]",
                  "name": "signers",
                  "type": "tuple[]"
                },
                {
                  "internalType": "uint128",
                  "name": "threshold",
                  "type": "uint128"
                },
                {
                  "internalType": "bytes32",
                  "name": "nonce",
                  "type": "bytes32"
                }
              ],
              "internalType": "struct WeightedSigners",
              "name": "signers",
              "type": "tuple"
            },
            {
              "internalType": "bytes[]",
              "name": "signatures",
              "type": "bytes[]"
            }
          ],
          "internalType": "struct Proof",
          "name": "proof",
          "type": "tuple"
        }
      ],
      "name": "validateProof",
      "outputs": [
        {
          "internalType": "bool",
          "name": "isLatestSigners",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x6101006040523480156200001257600080fd5b506040516200357638038062003576833981016040819052620000359162000104565b608083905260a082905260c08190526001620000518162000060565b50503060e05250620001339050565b6001600160a01b0381166200008857604051633649397d60e21b815260040160405180910390fd5b6040516001600160a01b038216907f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc68616390600090a27f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c05560007f9855384122b55936fbfb8ca5120e63c6537a1ac40caf6ae33502b3c5da8c87d155565b6000806000606084860312156200011a57600080fd5b8351925060208401519150604084015190509250925092565b60805160a05160c05160e0516133ed620001896000396000610c290152600081816105a801528181611e400152611e720152600081816105e2015261130f0152600081816103f3015261140301526133ed6000f3fe608060405234801561001057600080fd5b506004361061020b5760003560e01c80638da5cb5b1161012a578063d435b83e116100bd578063f2213d371161008c578063f698da2511610071578063f698da25146105dd578063f6a5f9f514610604578063fd721b471461061757600080fd5b8063f2213d37146105a3578063f2fde38b146105ca57600080fd5b8063d435b83e14610503578063e30c397814610542578063eb215f2814610569578063f10bfaa11461059057600080fd5b8063a3499c73116100f9578063a3499c7314610489578063c38bb5371461049c578063cba5be6a146104af578063d26ff210146104c257600080fd5b80638da5cb5b146104155780638f686dc41461043c578063900cf0cf1461044f5780639ded06df1461047657600080fd5b80635c60da1b116101a2578063710bf32211610171578063710bf322146103ad57806379ba5097146103c05780638291286c146103c85780638c212aa5146103ee57600080fd5b80635c60da1b146103395780635c975abb146103605780635f6970c31461038757806364f1d85a1461039a57600080fd5b8063377fff55116101de578063377fff55146102815780634091c6d5146102895780634a6a42d8146102c8578063570ca735146102db57600080fd5b8063116399e4146102105780631c92115f146102385780631d92c0bf1461024d5780632fbceb4f14610260575b600080fd5b61022361021e366004612279565b61062a565b60405190151581526020015b60405180910390f35b61024b610246366004612309565b61063d565b005b61024b61025b3660046125c9565b61070e565b61027361026e366004612623565b6107e2565b60405190815260200161022f565b61027361081b565b61027361029736600461268f565b60009081527f457f3fc26bf430b020fe76358b1bfaba57e1657ace718da6437cda9934eabfeb602052604090205490565b61024b6102d63660046126a8565b61084f565b7fca458dc12368669a3b8c292bc21c1b887ab1aa386fa3fcc1ed972afd74a330ca5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161022f565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc54610314565b7fee35723ac350a69d2a92d3703f17439cbaadf2f093a21ba5bf5f1a53eb2a14d854610223565b6102236103953660046126c5565b610946565b61024b6103a8366004612747565b6109ff565b61024b6103bb3660046126a8565b610a49565b61024b610b71565b7fd10cce6f0e3f6dc9eb8280c32952dc6e4759d0519c550c55d0f8747d13a64bfd610273565b6102737f000000000000000000000000000000000000000000000000000000000000000081565b7f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c054610314565b61022361044a3660046127de565b610bf8565b7f457f3fc26bf430b020fe76358b1bfaba57e1657ace718da6437cda9934eabfe854610273565b61024b610484366004612895565b610c26565b61024b6104973660046128d7565b610c9f565b61024b6104aa366004612927565b61103e565b6102236104bd366004612623565b611139565b6102236104d036600461268f565b60009081527f978b1ab9e384397ce0aab28eec0e3c25603b3210984045ad0e0f0a50d88cfc556020526040902054151590565b61027361051136600461268f565b60009081527f457f3fc26bf430b020fe76358b1bfaba57e1657ace718da6437cda9934eabfea602052604090205490565b7f9855384122b55936fbfb8ca5120e63c6537a1ac40caf6ae33502b3c5da8c87d154610314565b7f457f3fc26bf430b020fe76358b1bfaba57e1657ace718da6437cda9934eabfe954610273565b61022361059e366004612949565b611186565b6102737f000000000000000000000000000000000000000000000000000000000000000081565b61024b6105d83660046126a8565b611251565b6102737f000000000000000000000000000000000000000000000000000000000000000081565b6102236106123660046129ec565b6112c7565b610273610625366004612a83565b6112e4565b60006106368383611366565b9392505050565b7fee35723ac350a69d2a92d3703f17439cbaadf2f093a21ba5bf5f1a53eb2a14d85415610696576040517f6985a02200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81816040516106a6929190612aa5565b60405180910390203373ffffffffffffffffffffffffffffffffffffffff167f30ae6cc78c27e651745bf2ad08a11de83910ac1e347a52f7ac898c0fbef94dae8888888888886040516106fe96959493929190612afe565b60405180910390a3505050505050565b6000600183604051602001610724929190612c16565b60405160208183030381529060405280519060200120905060006107657fca458dc12368669a3b8c292bc21c1b887ab1aa386fa3fcc1ed972afd74a330ca90565b5473ffffffffffffffffffffffffffffffffffffffff163314159050600061078d8385611366565b905081801561079a575080155b156107d1576040517f83efaec200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107db8583611496565b5050505050565b6000848484846040516020016107fb9493929190612c3e565b604051602081830303815290604052805190602001209050949350505050565b7f457f3fc26bf430b020fe76358b1bfaba57e1657ace718da6437cda9934eabfe95460009061084a9042612cb4565b905090565b7fca458dc12368669a3b8c292bc21c1b887ab1aa386fa3fcc1ed972afd74a330ca54339073ffffffffffffffffffffffffffffffffffffffff1681148015906108e557507f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c05473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b15610939576040517f4c14f64c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024015b60405180910390fd5b610942826115cf565b5050565b60006109707fee35723ac350a69d2a92d3703f17439cbaadf2f093a21ba5bf5f1a53eb2a14d85490565b80156109af575061097f611668565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b156109e6576040517f6985a02200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109f4878787878787611692565b979650505050505050565b6000808484604051602001610a1693929190612d2b565b604051602081830303815290604052805190602001209050610a388183611366565b50610a438484611742565b50505050565b33610a727f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c05490565b73ffffffffffffffffffffffffffffffffffffffff1614610abf576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610b0c576040517fd924e5f400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405173ffffffffffffffffffffffffffffffffffffffff8216907fd9be0e8e07417e00f2521db636cb53e316fd288f5051f16d2aa2bf0c3938a87690600090a27f9855384122b55936fbfb8ca5120e63c6537a1ac40caf6ae33502b3c5da8c87d155565b6000610b9b7f9855384122b55936fbfb8ca5120e63c6537a1ac40caf6ae33502b3c5da8c87d15490565b905073ffffffffffffffffffffffffffffffffffffffff81163314610bec576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bf5816117bd565b50565b600080610c078a8a8a8a6107e2565b9050610c18818b8b89898989611893565b9a9950505050505050505050565b307f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1603610c95576040517fbf10dd3a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61094282826118e3565b33610cc87f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c05490565b73ffffffffffffffffffffffffffffffffffffffff1614610d15576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff16638291286c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da59190612e7a565b8473ffffffffffffffffffffffffffffffffffffffff16638291286c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610df0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e149190612e7a565b14610e4b576040517f68155f9a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff163f8314610e9b576040517f8f84fb2400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc84905560405173ffffffffffffffffffffffffffffffffffffffff8516907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28015610a435760008473ffffffffffffffffffffffffffffffffffffffff16639ded06df60e01b8484604051602401610f3a929190612e93565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909416939093179092529051610fc39190612ecb565b600060405180830381855af49150503d8060008114610ffe576040519150601f19603f3d011682016040523d82523d6000602084013e611003565b606091505b50509050806107db576040517f97905dfb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fca458dc12368669a3b8c292bc21c1b887ab1aa386fa3fcc1ed972afd74a330ca54339073ffffffffffffffffffffffffffffffffffffffff1681148015906110d457507f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c05473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b15611123576040517f4c14f64c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610930565b811561113157610942611954565b6109426119aa565b600060017f978b1ab9e384397ce0aab28eec0e3c25603b3210984045ad0e0f0a50d88cfc55600061116c888888886107e2565b815260200190815260200160002054149050949350505050565b60006111b07fee35723ac350a69d2a92d3703f17439cbaadf2f093a21ba5bf5f1a53eb2a14d85490565b80156111ef57506111bf611668565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15611226576040517f6985a02200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611234898989896107e2565b9050611244818a8a888888611692565b9998505050505050505050565b3361127a7f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c05490565b73ffffffffffffffffffffffffffffffffffffffff1614610bec576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006112d888888888888888611893565b98975050505050505050565b6040517f19457468657265756d205369676e6564204d6573736167653a0a39360000000060208201527f0000000000000000000000000000000000000000000000000000000000000000603c820152605c8101839052607c8101829052600090609c016040516020818303038152906040528051906020012090505b92915050565b60007f457f3fc26bf430b020fe76358b1bfaba57e1657ace718da6437cda9934eabfe8366113948480612ee7565b90506000816040516020016113a99190612f1b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181528151602092830120600081815260038701909352912054845480821496509192509081158061142e57507f000000000000000000000000000000000000000000000000000000000000000061142c8383612cb4565b115b15611465576040517f5e231fff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611471848a6112e4565b905061148a818661148560208c018c613035565b611a00565b50505050505092915050565b7f457f3fc26bf430b020fe76358b1bfaba57e1657ace718da6437cda9934eabfe86114c083611c55565b6114c982611e13565b6000836040516020016114dc919061309d565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160208201208354919250906000906115259060016130b0565b808555600081815260028601602090815260408083208690558583526003880190915290205490915015611588576040517f4311167900000000000000000000000000000000000000000000000000000000815260048101839052602401610930565b60008281526003850160205260409081902082905551829082907fe7cf1d3405bd906f8500af030e1130f3affbe991be73471a0d3983fe3ca61ebc906106fe9087906130c3565b807fca458dc12368669a3b8c292bc21c1b887ab1aa386fa3fcc1ed972afd74a330ca80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92831617905560405190821681527f1e3390359ca00dde8f3438aa04eceb3ee726e628c7daf84d23cc9619fcefdcb79060200160405180910390a150565b600061084a7f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c05490565b6000806116a488888888883389611f05565b60008981527f978b1ab9e384397ce0aab28eec0e3c25603b3210984045ad0e0f0a50d88cfc55602052604090205481149250905081156117375760008881527f978b1ab9e384397ce0aab28eec0e3c25603b3210984045ad0e0f0a50d88cfc556020526040808220600190555189917fe7d1e1f435233f7a187624ac11afaf32ee0da368cef8a5625be394412f61925491a25b509695505050505050565b80600081900361177e576040517f9d583fca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a43576117b584848381811061179e5761179e613114565b90506020028101906117b09190613143565b611f47565b600101611781565b73ffffffffffffffffffffffffffffffffffffffff811661180a576040517fd924e5f400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405173ffffffffffffffffffffffffffffffffffffffff8216907f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc68616390600090a27f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c05560007f9855384122b55936fbfb8ca5120e63c6537a1ac40caf6ae33502b3c5da8c87d155565b6000806118a589898989898989611f05565b6000998a527f978b1ab9e384397ce0aab28eec0e3c25603b3210984045ad0e0f0a50d88cfc5560205260409099205490981498975050505050505050565b6000806118f283850185613177565b909250905073ffffffffffffffffffffffffffffffffffffffff82161561191c5761191c826115cf565b60005b81518110156107db5761194c82828151811061193d5761193d613114565b60200260200101516000611496565b60010161191f565b61197d60017fee35723ac350a69d2a92d3703f17439cbaadf2f093a21ba5bf5f1a53eb2a14d855565b60405133907f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890600090a2565b6119d360007fee35723ac350a69d2a92d3703f17439cbaadf2f093a21ba5bf5f1a53eb2a14d855565b60405133907f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa90600090a2565b366000611a0d858061323d565b90925090508083600080805b83811015611c22576000611a858c8b8b85818110611a3957611a39613114565b9050602002810190611a4b91906132a5565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061209592505050565b90505b8584108015611aea5750878785818110611aa457611aa4613114565b611aba92602060409092020190810191506126a8565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b15611aff57611af88461330a565b9350611a88565b858403611b38576040517f186f8a7200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b878785818110611b4a57611b4a613114565b9050604002016020016020810190611b629190613342565b611b7e906fffffffffffffffffffffffffffffffff16846130b0565b9250611b9060408c0160208d01613342565b6fffffffffffffffffffffffffffffffff168310611c0e5784611bb48360016130b0565b03611bc6575050505050505050610a43565b611bd18260016130b0565b6040517f92b48b4f000000000000000000000000000000000000000000000000000000008152600481019190915260248101869052604401610930565b611c178461330a565b935050600101611a19565b506040517f203b225800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805180516000818103611c94576040517f5e231fff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805b83811015611d9e576000858281518110611cb457611cb4613114565b602002602001015190506000816000015190508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610611d2c576040517f5e231fff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b809350600082602001516fffffffffffffffffffffffffffffffff16905080600003611d84576040517f84677ce800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d8e81876130b0565b9550505050806001019050611c98565b5060208501516fffffffffffffffffffffffffffffffff81161580611dd45750806fffffffffffffffffffffffffffffffff1683105b15611e0b576040517faabd5a0900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b7f457f3fc26bf430b020fe76358b1bfaba57e1657ace718da6437cda9934eabfe95442828015611e6b57507f0000000000000000000000000000000000000000000000000000000000000000611e698383612cb4565b105b15611edf577f000000000000000000000000000000000000000000000000000000000000000082611e9c8184612cb4565b6040517f767479ad000000000000000000000000000000000000000000000000000000008152600481019390935260248301919091526044820152606401610930565b7f457f3fc26bf430b020fe76358b1bfaba57e1657ace718da6437cda9934eabfe9555050565b600087878787878787604051602001611f24979695949392919061335d565b604051602081830303815290604052805190602001209050979650505050505050565b6000611f63611f5683806132a5565b61026e60208601866132a5565b60008181527f978b1ab9e384397ce0aab28eec0e3c25603b3210984045ad0e0f0a50d88cfc55602052604090205490915015611f9d575050565b6000611fd482611fad85806132a5565b611fba60408801886132a5565b611fca60808a0160608b016126a8565b8960800135611f05565b60008381527f978b1ab9e384397ce0aab28eec0e3c25603b3210984045ad0e0f0a50d88cfc556020526040902081905590506080830180359061201a90606086016126a8565b73ffffffffffffffffffffffffffffffffffffffff16837fcda53a2698efcca41b57faaddeb19bcb237bb1c71b479721fcc3a6fd41ba809761205c87806132a5565b61206960208a018a6132a5565b61207660408c018c6132a5565b60405161208896959493929190612afe565b60405180910390a4505050565b600081516041146120d2576040517f4be6321b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208201516040830151606084015160001a7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a082111561213e576040517f40c1e74800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060ff16601b1415801561215657508060ff16601c14155b1561218d576040517f119bce3900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051600081526020810180835288905260ff831691810191909152606081018490526080810183905260019060a0016020604051602081039080840390855afa1580156121e0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015194505073ffffffffffffffffffffffffffffffffffffffff8416612258576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505092915050565b60006040828403121561227357600080fd5b50919050565b6000806040838503121561228c57600080fd5b82359150602083013567ffffffffffffffff8111156122aa57600080fd5b6122b685828601612261565b9150509250929050565b60008083601f8401126122d257600080fd5b50813567ffffffffffffffff8111156122ea57600080fd5b60208301915083602082850101111561230257600080fd5b9250929050565b6000806000806000806060878903121561232257600080fd5b863567ffffffffffffffff8082111561233a57600080fd5b6123468a838b016122c0565b9098509650602089013591508082111561235f57600080fd5b61236b8a838b016122c0565b9096509450604089013591508082111561238457600080fd5b5061239189828a016122c0565b979a9699509497509295939492505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff811182821017156123f5576123f56123a3565b60405290565b6040805190810167ffffffffffffffff811182821017156123f5576123f56123a3565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612465576124656123a3565b604052919050565b600067ffffffffffffffff821115612487576124876123a3565b5060051b60200190565b73ffffffffffffffffffffffffffffffffffffffff81168114610bf557600080fd5b80356fffffffffffffffffffffffffffffffff811681146124d357600080fd5b919050565b6000606082840312156124ea57600080fd5b6124f26123d2565b9050813567ffffffffffffffff81111561250b57600080fd5b8201601f8101841361251c57600080fd5b8035602061253161252c8361246d565b61241e565b82815260069290921b8301810191818101908784111561255057600080fd5b938201935b838510156125a4576040858903121561256e5760008081fd5b6125766123fb565b853561258181612491565b815261258e8685016124b3565b8185015282526040949094019390820190612555565b8552506125b28582016124b3565b818501525050506040820135604082015292915050565b600080604083850312156125dc57600080fd5b823567ffffffffffffffff808211156125f457600080fd5b612600868387016124d8565b9350602085013591508082111561261657600080fd5b506122b685828601612261565b6000806000806040858703121561263957600080fd5b843567ffffffffffffffff8082111561265157600080fd5b61265d888389016122c0565b9096509450602087013591508082111561267657600080fd5b50612683878288016122c0565b95989497509550505050565b6000602082840312156126a157600080fd5b5035919050565b6000602082840312156126ba57600080fd5b813561063681612491565b600080600080600080608087890312156126de57600080fd5b86359550602087013567ffffffffffffffff808211156126fd57600080fd5b6127098a838b016122c0565b9097509550604089013591508082111561272257600080fd5b5061272f89828a016122c0565b979a9699509497949695606090950135949350505050565b60008060006040848603121561275c57600080fd5b833567ffffffffffffffff8082111561277457600080fd5b818601915086601f83011261278857600080fd5b81358181111561279757600080fd5b8760208260051b85010111156127ac57600080fd5b6020928301955093509085013590808211156127c757600080fd5b506127d486828701612261565b9150509250925092565b60008060008060008060008060a0898b0312156127fa57600080fd5b883567ffffffffffffffff8082111561281257600080fd5b61281e8c838d016122c0565b909a50985060208b013591508082111561283757600080fd5b6128438c838d016122c0565b909850965060408b013591508082111561285c57600080fd5b506128698b828c016122c0565b909550935050606089013561287d81612491565b80925050608089013590509295985092959890939650565b600080602083850312156128a857600080fd5b823567ffffffffffffffff8111156128bf57600080fd5b6128cb858286016122c0565b90969095509350505050565b600080600080606085870312156128ed57600080fd5b84356128f881612491565b935060208501359250604085013567ffffffffffffffff81111561291b57600080fd5b612683878288016122c0565b60006020828403121561293957600080fd5b8135801515811461063657600080fd5b60008060008060008060006080888a03121561296457600080fd5b873567ffffffffffffffff8082111561297c57600080fd5b6129888b838c016122c0565b909950975060208a01359150808211156129a157600080fd5b6129ad8b838c016122c0565b909750955060408a01359150808211156129c657600080fd5b506129d38a828b016122c0565b989b979a50959894979596606090950135949350505050565b600080600080600080600060a0888a031215612a0757600080fd5b87359650602088013567ffffffffffffffff80821115612a2657600080fd5b612a328b838c016122c0565b909850965060408a0135915080821115612a4b57600080fd5b50612a588a828b016122c0565b9095509350506060880135612a6c81612491565b809250506080880135905092959891949750929550565b60008060408385031215612a9657600080fd5b50508035926020909101359150565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b606081526000612b1260608301888a612ab5565b8281036020840152612b25818789612ab5565b90508281036040840152611244818587612ab5565b60028110612b71577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b805160608084528151908401819052600091602091908201906080860190845b81811015612be4578351805173ffffffffffffffffffffffffffffffffffffffff1684528501516fffffffffffffffffffffffffffffffff168584015292840192604090920191600101612b95565b50506fffffffffffffffffffffffffffffffff8386015116838701526040850151604087015280935050505092915050565b612c208184612b3a565b604060208201526000612c366040830184612b75565b949350505050565b8385823760008482017f5f00000000000000000000000000000000000000000000000000000000000000815283856001830137600093016001019283525090949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561136057611360612c85565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612cfc57600080fd5b830160208101925035905067ffffffffffffffff811115612d1c57600080fd5b80360382131561230257600080fd5b60006040808301612d3c8488612b3a565b602060406020860152818683526060925060608601905060608760051b870101886000805b8a811015612e69577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301855282357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff618d3603018112612dc1578283fd5b8c0160a0612dcf8280612cc7565b828852612ddf8389018284612ab5565b92505050612def88830183612cc7565b8783038a890152612e01838284612ab5565b92505050612e118a830183612cc7565b8783038c890152612e23838284612ab5565b9250505088820135612e3481612491565b73ffffffffffffffffffffffffffffffffffffffff16868a015260809182013591909501529385019391850191600101612d61565b50919b9a5050505050505050505050565b600060208284031215612e8c57600080fd5b5051919050565b602081526000612c36602083018486612ab5565b60005b83811015612ec2578181015183820152602001612eaa565b50506000910152565b60008251612edd818460208701612ea7565b9190910192915050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112612edd57600080fd5b600060208083526080830184357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1863603018112612f5857600080fd5b8501828101903567ffffffffffffffff811115612f7457600080fd5b8060061b3603821315612f8657600080fd5b606086850152918290529060009060a086015b81831015612ff8578335612fac81612491565b73ffffffffffffffffffffffffffffffffffffffff1681526fffffffffffffffffffffffffffffffff612fe08587016124b3565b16818601526040938401936001939093019201612f99565b6130038589016124b3565b6fffffffffffffffffffffffffffffffff81166040890152945060408801356060880152809550505050505092915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261306a57600080fd5b83018035915067ffffffffffffffff82111561308557600080fd5b6020019150600581901b360382131561230257600080fd5b6020815260006106366020830184612b75565b8082018082111561136057611360612c85565b60208152600082518060208401526130e2816040850160208701612ea7565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112612edd57600080fd5b6000806040838503121561318a57600080fd5b823561319581612491565b915060208381013567ffffffffffffffff808211156131b357600080fd5b818601915086601f8301126131c757600080fd5b81356131d561252c8261246d565b81815260059190911b830184019084810190898311156131f457600080fd5b8585015b8381101561322c578035858111156132105760008081fd5b61321e8c89838a01016124d8565b8452509186019186016131f8565b508096505050505050509250929050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261327257600080fd5b83018035915067ffffffffffffffff82111561328d57600080fd5b6020019150600681901b360382131561230257600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126132da57600080fd5b83018035915067ffffffffffffffff8211156132f557600080fd5b60200191503681900382131561230257600080fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361333b5761333b612c85565b5060010190565b60006020828403121561335457600080fd5b610636826124b3565b87815260a06020820152600061337760a08301888a612ab5565b828103604084015261338a818789612ab5565b73ffffffffffffffffffffffffffffffffffffffff9590951660608401525050608001529594505050505056fea2646970667358221220bad61916f2420deca5c34c2c2c792ba439e132528f80374947af750ba297fec164736f6c63430008170033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061020b5760003560e01c80638da5cb5b1161012a578063d435b83e116100bd578063f2213d371161008c578063f698da2511610071578063f698da25146105dd578063f6a5f9f514610604578063fd721b471461061757600080fd5b8063f2213d37146105a3578063f2fde38b146105ca57600080fd5b8063d435b83e14610503578063e30c397814610542578063eb215f2814610569578063f10bfaa11461059057600080fd5b8063a3499c73116100f9578063a3499c7314610489578063c38bb5371461049c578063cba5be6a146104af578063d26ff210146104c257600080fd5b80638da5cb5b146104155780638f686dc41461043c578063900cf0cf1461044f5780639ded06df1461047657600080fd5b80635c60da1b116101a2578063710bf32211610171578063710bf322146103ad57806379ba5097146103c05780638291286c146103c85780638c212aa5146103ee57600080fd5b80635c60da1b146103395780635c975abb146103605780635f6970c31461038757806364f1d85a1461039a57600080fd5b8063377fff55116101de578063377fff55146102815780634091c6d5146102895780634a6a42d8146102c8578063570ca735146102db57600080fd5b8063116399e4146102105780631c92115f146102385780631d92c0bf1461024d5780632fbceb4f14610260575b600080fd5b61022361021e366004612279565b61062a565b60405190151581526020015b60405180910390f35b61024b610246366004612309565b61063d565b005b61024b61025b3660046125c9565b61070e565b61027361026e366004612623565b6107e2565b60405190815260200161022f565b61027361081b565b61027361029736600461268f565b60009081527f457f3fc26bf430b020fe76358b1bfaba57e1657ace718da6437cda9934eabfeb602052604090205490565b61024b6102d63660046126a8565b61084f565b7fca458dc12368669a3b8c292bc21c1b887ab1aa386fa3fcc1ed972afd74a330ca5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161022f565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc54610314565b7fee35723ac350a69d2a92d3703f17439cbaadf2f093a21ba5bf5f1a53eb2a14d854610223565b6102236103953660046126c5565b610946565b61024b6103a8366004612747565b6109ff565b61024b6103bb3660046126a8565b610a49565b61024b610b71565b7fd10cce6f0e3f6dc9eb8280c32952dc6e4759d0519c550c55d0f8747d13a64bfd610273565b6102737f000000000000000000000000000000000000000000000000000000000000000081565b7f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c054610314565b61022361044a3660046127de565b610bf8565b7f457f3fc26bf430b020fe76358b1bfaba57e1657ace718da6437cda9934eabfe854610273565b61024b610484366004612895565b610c26565b61024b6104973660046128d7565b610c9f565b61024b6104aa366004612927565b61103e565b6102236104bd366004612623565b611139565b6102236104d036600461268f565b60009081527f978b1ab9e384397ce0aab28eec0e3c25603b3210984045ad0e0f0a50d88cfc556020526040902054151590565b61027361051136600461268f565b60009081527f457f3fc26bf430b020fe76358b1bfaba57e1657ace718da6437cda9934eabfea602052604090205490565b7f9855384122b55936fbfb8ca5120e63c6537a1ac40caf6ae33502b3c5da8c87d154610314565b7f457f3fc26bf430b020fe76358b1bfaba57e1657ace718da6437cda9934eabfe954610273565b61022361059e366004612949565b611186565b6102737f000000000000000000000000000000000000000000000000000000000000000081565b61024b6105d83660046126a8565b611251565b6102737f000000000000000000000000000000000000000000000000000000000000000081565b6102236106123660046129ec565b6112c7565b610273610625366004612a83565b6112e4565b60006106368383611366565b9392505050565b7fee35723ac350a69d2a92d3703f17439cbaadf2f093a21ba5bf5f1a53eb2a14d85415610696576040517f6985a02200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81816040516106a6929190612aa5565b60405180910390203373ffffffffffffffffffffffffffffffffffffffff167f30ae6cc78c27e651745bf2ad08a11de83910ac1e347a52f7ac898c0fbef94dae8888888888886040516106fe96959493929190612afe565b60405180910390a3505050505050565b6000600183604051602001610724929190612c16565b60405160208183030381529060405280519060200120905060006107657fca458dc12368669a3b8c292bc21c1b887ab1aa386fa3fcc1ed972afd74a330ca90565b5473ffffffffffffffffffffffffffffffffffffffff163314159050600061078d8385611366565b905081801561079a575080155b156107d1576040517f83efaec200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107db8583611496565b5050505050565b6000848484846040516020016107fb9493929190612c3e565b604051602081830303815290604052805190602001209050949350505050565b7f457f3fc26bf430b020fe76358b1bfaba57e1657ace718da6437cda9934eabfe95460009061084a9042612cb4565b905090565b7fca458dc12368669a3b8c292bc21c1b887ab1aa386fa3fcc1ed972afd74a330ca54339073ffffffffffffffffffffffffffffffffffffffff1681148015906108e557507f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c05473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b15610939576040517f4c14f64c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024015b60405180910390fd5b610942826115cf565b5050565b60006109707fee35723ac350a69d2a92d3703f17439cbaadf2f093a21ba5bf5f1a53eb2a14d85490565b80156109af575061097f611668565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b156109e6576040517f6985a02200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109f4878787878787611692565b979650505050505050565b6000808484604051602001610a1693929190612d2b565b604051602081830303815290604052805190602001209050610a388183611366565b50610a438484611742565b50505050565b33610a727f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c05490565b73ffffffffffffffffffffffffffffffffffffffff1614610abf576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610b0c576040517fd924e5f400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405173ffffffffffffffffffffffffffffffffffffffff8216907fd9be0e8e07417e00f2521db636cb53e316fd288f5051f16d2aa2bf0c3938a87690600090a27f9855384122b55936fbfb8ca5120e63c6537a1ac40caf6ae33502b3c5da8c87d155565b6000610b9b7f9855384122b55936fbfb8ca5120e63c6537a1ac40caf6ae33502b3c5da8c87d15490565b905073ffffffffffffffffffffffffffffffffffffffff81163314610bec576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bf5816117bd565b50565b600080610c078a8a8a8a6107e2565b9050610c18818b8b89898989611893565b9a9950505050505050505050565b307f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1603610c95576040517fbf10dd3a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61094282826118e3565b33610cc87f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c05490565b73ffffffffffffffffffffffffffffffffffffffff1614610d15576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff16638291286c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da59190612e7a565b8473ffffffffffffffffffffffffffffffffffffffff16638291286c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610df0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e149190612e7a565b14610e4b576040517f68155f9a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff163f8314610e9b576040517f8f84fb2400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc84905560405173ffffffffffffffffffffffffffffffffffffffff8516907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28015610a435760008473ffffffffffffffffffffffffffffffffffffffff16639ded06df60e01b8484604051602401610f3a929190612e93565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909416939093179092529051610fc39190612ecb565b600060405180830381855af49150503d8060008114610ffe576040519150601f19603f3d011682016040523d82523d6000602084013e611003565b606091505b50509050806107db576040517f97905dfb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fca458dc12368669a3b8c292bc21c1b887ab1aa386fa3fcc1ed972afd74a330ca54339073ffffffffffffffffffffffffffffffffffffffff1681148015906110d457507f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c05473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b15611123576040517f4c14f64c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610930565b811561113157610942611954565b6109426119aa565b600060017f978b1ab9e384397ce0aab28eec0e3c25603b3210984045ad0e0f0a50d88cfc55600061116c888888886107e2565b815260200190815260200160002054149050949350505050565b60006111b07fee35723ac350a69d2a92d3703f17439cbaadf2f093a21ba5bf5f1a53eb2a14d85490565b80156111ef57506111bf611668565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15611226576040517f6985a02200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611234898989896107e2565b9050611244818a8a888888611692565b9998505050505050505050565b3361127a7f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c05490565b73ffffffffffffffffffffffffffffffffffffffff1614610bec576040517f30cd747100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006112d888888888888888611893565b98975050505050505050565b6040517f19457468657265756d205369676e6564204d6573736167653a0a39360000000060208201527f0000000000000000000000000000000000000000000000000000000000000000603c820152605c8101839052607c8101829052600090609c016040516020818303038152906040528051906020012090505b92915050565b60007f457f3fc26bf430b020fe76358b1bfaba57e1657ace718da6437cda9934eabfe8366113948480612ee7565b90506000816040516020016113a99190612f1b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181528151602092830120600081815260038701909352912054845480821496509192509081158061142e57507f000000000000000000000000000000000000000000000000000000000000000061142c8383612cb4565b115b15611465576040517f5e231fff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611471848a6112e4565b905061148a818661148560208c018c613035565b611a00565b50505050505092915050565b7f457f3fc26bf430b020fe76358b1bfaba57e1657ace718da6437cda9934eabfe86114c083611c55565b6114c982611e13565b6000836040516020016114dc919061309d565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052805160208201208354919250906000906115259060016130b0565b808555600081815260028601602090815260408083208690558583526003880190915290205490915015611588576040517f4311167900000000000000000000000000000000000000000000000000000000815260048101839052602401610930565b60008281526003850160205260409081902082905551829082907fe7cf1d3405bd906f8500af030e1130f3affbe991be73471a0d3983fe3ca61ebc906106fe9087906130c3565b807fca458dc12368669a3b8c292bc21c1b887ab1aa386fa3fcc1ed972afd74a330ca80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92831617905560405190821681527f1e3390359ca00dde8f3438aa04eceb3ee726e628c7daf84d23cc9619fcefdcb79060200160405180910390a150565b600061084a7f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c05490565b6000806116a488888888883389611f05565b60008981527f978b1ab9e384397ce0aab28eec0e3c25603b3210984045ad0e0f0a50d88cfc55602052604090205481149250905081156117375760008881527f978b1ab9e384397ce0aab28eec0e3c25603b3210984045ad0e0f0a50d88cfc556020526040808220600190555189917fe7d1e1f435233f7a187624ac11afaf32ee0da368cef8a5625be394412f61925491a25b509695505050505050565b80600081900361177e576040517f9d583fca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610a43576117b584848381811061179e5761179e613114565b90506020028101906117b09190613143565b611f47565b600101611781565b73ffffffffffffffffffffffffffffffffffffffff811661180a576040517fd924e5f400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405173ffffffffffffffffffffffffffffffffffffffff8216907f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc68616390600090a27f02016836a56b71f0d02689e69e326f4f4c1b9057164ef592671cf0d37c8040c05560007f9855384122b55936fbfb8ca5120e63c6537a1ac40caf6ae33502b3c5da8c87d155565b6000806118a589898989898989611f05565b6000998a527f978b1ab9e384397ce0aab28eec0e3c25603b3210984045ad0e0f0a50d88cfc5560205260409099205490981498975050505050505050565b6000806118f283850185613177565b909250905073ffffffffffffffffffffffffffffffffffffffff82161561191c5761191c826115cf565b60005b81518110156107db5761194c82828151811061193d5761193d613114565b60200260200101516000611496565b60010161191f565b61197d60017fee35723ac350a69d2a92d3703f17439cbaadf2f093a21ba5bf5f1a53eb2a14d855565b60405133907f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890600090a2565b6119d360007fee35723ac350a69d2a92d3703f17439cbaadf2f093a21ba5bf5f1a53eb2a14d855565b60405133907f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa90600090a2565b366000611a0d858061323d565b90925090508083600080805b83811015611c22576000611a858c8b8b85818110611a3957611a39613114565b9050602002810190611a4b91906132a5565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061209592505050565b90505b8584108015611aea5750878785818110611aa457611aa4613114565b611aba92602060409092020190810191506126a8565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b15611aff57611af88461330a565b9350611a88565b858403611b38576040517f186f8a7200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b878785818110611b4a57611b4a613114565b9050604002016020016020810190611b629190613342565b611b7e906fffffffffffffffffffffffffffffffff16846130b0565b9250611b9060408c0160208d01613342565b6fffffffffffffffffffffffffffffffff168310611c0e5784611bb48360016130b0565b03611bc6575050505050505050610a43565b611bd18260016130b0565b6040517f92b48b4f000000000000000000000000000000000000000000000000000000008152600481019190915260248101869052604401610930565b611c178461330a565b935050600101611a19565b506040517f203b225800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805180516000818103611c94576040517f5e231fff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805b83811015611d9e576000858281518110611cb457611cb4613114565b602002602001015190506000816000015190508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610611d2c576040517f5e231fff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b809350600082602001516fffffffffffffffffffffffffffffffff16905080600003611d84576040517f84677ce800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d8e81876130b0565b9550505050806001019050611c98565b5060208501516fffffffffffffffffffffffffffffffff81161580611dd45750806fffffffffffffffffffffffffffffffff1683105b15611e0b576040517faabd5a0900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b7f457f3fc26bf430b020fe76358b1bfaba57e1657ace718da6437cda9934eabfe95442828015611e6b57507f0000000000000000000000000000000000000000000000000000000000000000611e698383612cb4565b105b15611edf577f000000000000000000000000000000000000000000000000000000000000000082611e9c8184612cb4565b6040517f767479ad000000000000000000000000000000000000000000000000000000008152600481019390935260248301919091526044820152606401610930565b7f457f3fc26bf430b020fe76358b1bfaba57e1657ace718da6437cda9934eabfe9555050565b600087878787878787604051602001611f24979695949392919061335d565b604051602081830303815290604052805190602001209050979650505050505050565b6000611f63611f5683806132a5565b61026e60208601866132a5565b60008181527f978b1ab9e384397ce0aab28eec0e3c25603b3210984045ad0e0f0a50d88cfc55602052604090205490915015611f9d575050565b6000611fd482611fad85806132a5565b611fba60408801886132a5565b611fca60808a0160608b016126a8565b8960800135611f05565b60008381527f978b1ab9e384397ce0aab28eec0e3c25603b3210984045ad0e0f0a50d88cfc556020526040902081905590506080830180359061201a90606086016126a8565b73ffffffffffffffffffffffffffffffffffffffff16837fcda53a2698efcca41b57faaddeb19bcb237bb1c71b479721fcc3a6fd41ba809761205c87806132a5565b61206960208a018a6132a5565b61207660408c018c6132a5565b60405161208896959493929190612afe565b60405180910390a4505050565b600081516041146120d2576040517f4be6321b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208201516040830151606084015160001a7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a082111561213e576040517f40c1e74800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060ff16601b1415801561215657508060ff16601c14155b1561218d576040517f119bce3900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051600081526020810180835288905260ff831691810191909152606081018490526080810183905260019060a0016020604051602081039080840390855afa1580156121e0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015194505073ffffffffffffffffffffffffffffffffffffffff8416612258576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505092915050565b60006040828403121561227357600080fd5b50919050565b6000806040838503121561228c57600080fd5b82359150602083013567ffffffffffffffff8111156122aa57600080fd5b6122b685828601612261565b9150509250929050565b60008083601f8401126122d257600080fd5b50813567ffffffffffffffff8111156122ea57600080fd5b60208301915083602082850101111561230257600080fd5b9250929050565b6000806000806000806060878903121561232257600080fd5b863567ffffffffffffffff8082111561233a57600080fd5b6123468a838b016122c0565b9098509650602089013591508082111561235f57600080fd5b61236b8a838b016122c0565b9096509450604089013591508082111561238457600080fd5b5061239189828a016122c0565b979a9699509497509295939492505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516060810167ffffffffffffffff811182821017156123f5576123f56123a3565b60405290565b6040805190810167ffffffffffffffff811182821017156123f5576123f56123a3565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612465576124656123a3565b604052919050565b600067ffffffffffffffff821115612487576124876123a3565b5060051b60200190565b73ffffffffffffffffffffffffffffffffffffffff81168114610bf557600080fd5b80356fffffffffffffffffffffffffffffffff811681146124d357600080fd5b919050565b6000606082840312156124ea57600080fd5b6124f26123d2565b9050813567ffffffffffffffff81111561250b57600080fd5b8201601f8101841361251c57600080fd5b8035602061253161252c8361246d565b61241e565b82815260069290921b8301810191818101908784111561255057600080fd5b938201935b838510156125a4576040858903121561256e5760008081fd5b6125766123fb565b853561258181612491565b815261258e8685016124b3565b8185015282526040949094019390820190612555565b8552506125b28582016124b3565b818501525050506040820135604082015292915050565b600080604083850312156125dc57600080fd5b823567ffffffffffffffff808211156125f457600080fd5b612600868387016124d8565b9350602085013591508082111561261657600080fd5b506122b685828601612261565b6000806000806040858703121561263957600080fd5b843567ffffffffffffffff8082111561265157600080fd5b61265d888389016122c0565b9096509450602087013591508082111561267657600080fd5b50612683878288016122c0565b95989497509550505050565b6000602082840312156126a157600080fd5b5035919050565b6000602082840312156126ba57600080fd5b813561063681612491565b600080600080600080608087890312156126de57600080fd5b86359550602087013567ffffffffffffffff808211156126fd57600080fd5b6127098a838b016122c0565b9097509550604089013591508082111561272257600080fd5b5061272f89828a016122c0565b979a9699509497949695606090950135949350505050565b60008060006040848603121561275c57600080fd5b833567ffffffffffffffff8082111561277457600080fd5b818601915086601f83011261278857600080fd5b81358181111561279757600080fd5b8760208260051b85010111156127ac57600080fd5b6020928301955093509085013590808211156127c757600080fd5b506127d486828701612261565b9150509250925092565b60008060008060008060008060a0898b0312156127fa57600080fd5b883567ffffffffffffffff8082111561281257600080fd5b61281e8c838d016122c0565b909a50985060208b013591508082111561283757600080fd5b6128438c838d016122c0565b909850965060408b013591508082111561285c57600080fd5b506128698b828c016122c0565b909550935050606089013561287d81612491565b80925050608089013590509295985092959890939650565b600080602083850312156128a857600080fd5b823567ffffffffffffffff8111156128bf57600080fd5b6128cb858286016122c0565b90969095509350505050565b600080600080606085870312156128ed57600080fd5b84356128f881612491565b935060208501359250604085013567ffffffffffffffff81111561291b57600080fd5b612683878288016122c0565b60006020828403121561293957600080fd5b8135801515811461063657600080fd5b60008060008060008060006080888a03121561296457600080fd5b873567ffffffffffffffff8082111561297c57600080fd5b6129888b838c016122c0565b909950975060208a01359150808211156129a157600080fd5b6129ad8b838c016122c0565b909750955060408a01359150808211156129c657600080fd5b506129d38a828b016122c0565b989b979a50959894979596606090950135949350505050565b600080600080600080600060a0888a031215612a0757600080fd5b87359650602088013567ffffffffffffffff80821115612a2657600080fd5b612a328b838c016122c0565b909850965060408a0135915080821115612a4b57600080fd5b50612a588a828b016122c0565b9095509350506060880135612a6c81612491565b809250506080880135905092959891949750929550565b60008060408385031215612a9657600080fd5b50508035926020909101359150565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b606081526000612b1260608301888a612ab5565b8281036020840152612b25818789612ab5565b90508281036040840152611244818587612ab5565b60028110612b71577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b805160608084528151908401819052600091602091908201906080860190845b81811015612be4578351805173ffffffffffffffffffffffffffffffffffffffff1684528501516fffffffffffffffffffffffffffffffff168584015292840192604090920191600101612b95565b50506fffffffffffffffffffffffffffffffff8386015116838701526040850151604087015280935050505092915050565b612c208184612b3a565b604060208201526000612c366040830184612b75565b949350505050565b8385823760008482017f5f00000000000000000000000000000000000000000000000000000000000000815283856001830137600093016001019283525090949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561136057611360612c85565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612cfc57600080fd5b830160208101925035905067ffffffffffffffff811115612d1c57600080fd5b80360382131561230257600080fd5b60006040808301612d3c8488612b3a565b602060406020860152818683526060925060608601905060608760051b870101886000805b8a811015612e69577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08a850301855282357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff618d3603018112612dc1578283fd5b8c0160a0612dcf8280612cc7565b828852612ddf8389018284612ab5565b92505050612def88830183612cc7565b8783038a890152612e01838284612ab5565b92505050612e118a830183612cc7565b8783038c890152612e23838284612ab5565b9250505088820135612e3481612491565b73ffffffffffffffffffffffffffffffffffffffff16868a015260809182013591909501529385019391850191600101612d61565b50919b9a5050505050505050505050565b600060208284031215612e8c57600080fd5b5051919050565b602081526000612c36602083018486612ab5565b60005b83811015612ec2578181015183820152602001612eaa565b50506000910152565b60008251612edd818460208701612ea7565b9190910192915050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112612edd57600080fd5b600060208083526080830184357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1863603018112612f5857600080fd5b8501828101903567ffffffffffffffff811115612f7457600080fd5b8060061b3603821315612f8657600080fd5b606086850152918290529060009060a086015b81831015612ff8578335612fac81612491565b73ffffffffffffffffffffffffffffffffffffffff1681526fffffffffffffffffffffffffffffffff612fe08587016124b3565b16818601526040938401936001939093019201612f99565b6130038589016124b3565b6fffffffffffffffffffffffffffffffff81166040890152945060408801356060880152809550505050505092915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261306a57600080fd5b83018035915067ffffffffffffffff82111561308557600080fd5b6020019150600581901b360382131561230257600080fd5b6020815260006106366020830184612b75565b8082018082111561136057611360612c85565b60208152600082518060208401526130e2816040850160208701612ea7565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112612edd57600080fd5b6000806040838503121561318a57600080fd5b823561319581612491565b915060208381013567ffffffffffffffff808211156131b357600080fd5b818601915086601f8301126131c757600080fd5b81356131d561252c8261246d565b81815260059190911b830184019084810190898311156131f457600080fd5b8585015b8381101561322c578035858111156132105760008081fd5b61321e8c89838a01016124d8565b8452509186019186016131f8565b508096505050505050509250929050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261327257600080fd5b83018035915067ffffffffffffffff82111561328d57600080fd5b6020019150600681901b360382131561230257600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126132da57600080fd5b83018035915067ffffffffffffffff8211156132f557600080fd5b60200191503681900382131561230257600080fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361333b5761333b612c85565b5060010190565b60006020828403121561335457600080fd5b610636826124b3565b87815260a06020820152600061337760a08301888a612ab5565b828103604084015261338a818789612ab5565b73ffffffffffffffffffffffffffffffffffffffff9590951660608401525050608001529594505050505056fea2646970667358221220bad61916f2420deca5c34c2c2c792ba439e132528f80374947af750ba297fec164736f6c63430008170033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
