Files
self/app/deployments/ProofOfPassport.json
0xturboblitz ad076dd29b merkle tree circuit proving in app
- factor out generateCircuitInputs
- new proof working on iOS
- new zkey on aws and contract deployment
- not working on android because of mysterious bug
2024-02-23 16:34:13 -07:00

648 lines
115 KiB
JSON

{
"_format": "hh-sol-artifact-1",
"contractName": "ProofOfPassport",
"sourceName": "contracts/ProofOfPassport.sol",
"abi": [
{
"inputs": [
{
"internalType": "contract Groth16Verifier",
"name": "v",
"type": "address"
},
{
"internalType": "contract Formatter",
"name": "f",
"type": "address"
},
{
"internalType": "contract Registry",
"name": "r",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "approved",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "Approval",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"indexed": false,
"internalType": "bool",
"name": "approved",
"type": "bool"
}
],
"name": "ApprovalForAll",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "previousOwner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "OwnershipTransferred",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "from",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "to",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "Transfer",
"type": "event"
},
{
"inputs": [
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "approve",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "attributePositions",
"outputs": [
{
"internalType": "string",
"name": "name",
"type": "string"
},
{
"internalType": "uint256",
"name": "start",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "end",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "index",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "balanceOf",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256[3]",
"name": "publicSignals",
"type": "uint256[3]"
}
],
"name": "fieldElementsToBytes",
"outputs": [
{
"internalType": "bytes",
"name": "",
"type": "bytes"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [],
"name": "formatter",
"outputs": [
{
"internalType": "contract Formatter",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "getApproved",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "address",
"name": "operator",
"type": "address"
}
],
"name": "isApprovedForAll",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_tokenId",
"type": "uint256"
}
],
"name": "isExpired",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256[2]",
"name": "a",
"type": "uint256[2]"
},
{
"internalType": "uint256[2][2]",
"name": "b",
"type": "uint256[2][2]"
},
{
"internalType": "uint256[2]",
"name": "c",
"type": "uint256[2]"
},
{
"internalType": "uint256[6]",
"name": "inputs",
"type": "uint256[6]"
}
],
"name": "mint",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "name",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "nullifiers",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "ownerOf",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "registry",
"outputs": [
{
"internalType": "contract Registry",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "renounceOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "safeTransferFrom",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "safeTransferFrom",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"internalType": "bool",
"name": "approved",
"type": "bool"
}
],
"name": "setApprovalForAll",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256[6]",
"name": "input",
"type": "uint256[6]"
}
],
"name": "sliceFirstThree",
"outputs": [
{
"internalType": "uint256[3]",
"name": "",
"type": "uint256[3]"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "interfaceId",
"type": "bytes4"
}
],
"name": "supportsInterface",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "symbol",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "index",
"type": "uint256"
}
],
"name": "tokenByIndex",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "uint256",
"name": "index",
"type": "uint256"
}
],
"name": "tokenOfOwnerByIndex",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_tokenId",
"type": "uint256"
}
],
"name": "tokenURI",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "totalSupply",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "transferFrom",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "verifier",
"outputs": [
{
"internalType": "contract Groth16Verifier",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
}
],
"bytecode": "0x60a06040523480156200001157600080fd5b5060405162006d7538038062006d75833981810160405281019062000037919062000a16565b6040518060400160405280600f81526020017f50726f6f664f6650617373706f727400000000000000000000000000000000008152506040518060400160405280600f81526020017f50726f6f664f6650617373706f727400000000000000000000000000000000008152508160009081620000b4919062000cec565b508060019081620000c6919062000cec565b505050620000e9620000dd620001c960201b60201c565b620001d160201b60201c565b8273ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001af6200029760201b60201c565b620001c033620007bd60201b60201c565b50505062000eee565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600e60405180608001604052806040518060400160405280600d81526020017f69737375696e675f7374617465000000000000000000000000000000000000008152508152602001600281526020016004815260200160008152509080600181540180825580915050600190039060005260206000209060040201600090919091909150600082015181600001908162000332919062000cec565b506020820151816001015560408201518160020155606082015181600301555050600e60405180608001604052806040518060400160405280600481526020017f6e616d6500000000000000000000000000000000000000000000000000000000815250815260200160058152602001602b8152602001600181525090806001815401808255809150506001900390600052602060002090600402016000909190919091506000820151816000019081620003ee919062000cec565b506020820151816001015560408201518160020155606082015181600301555050600e60405180608001604052806040518060400160405280600f81526020017f70617373706f72745f6e756d62657200000000000000000000000000000000008152508152602001602c815260200160348152602001600281525090806001815401808255809150506001900390600052602060002090600402016000909190919091506000820151816000019081620004aa919062000cec565b506020820151816001015560408201518160020155606082015181600301555050600e60405180608001604052806040518060400160405280600b81526020017f6e6174696f6e616c6974790000000000000000000000000000000000000000008152508152602001603681526020016038815260200160038152509080600181540180825580915050600190039060005260206000209060040201600090919091909150600082015181600001908162000566919062000cec565b506020820151816001015560408201518160020155606082015181600301555050600e60405180608001604052806040518060400160405280600d81526020017f646174655f6f665f626972746800000000000000000000000000000000000000815250815260200160398152602001603e815260200160048152509080600181540180825580915050600190039060005260206000209060040201600090919091909150600082015181600001908162000622919062000cec565b506020820151816001015560408201518160020155606082015181600301555050600e60405180608001604052806040518060400160405280600681526020017f67656e646572000000000000000000000000000000000000000000000000000081525081526020016040815260200160408152602001600581525090806001815401808255809150506001900390600052602060002090600402016000909190919091506000820151816000019081620006de919062000cec565b506020820151816001015560408201518160020155606082015181600301555050600e60405180608001604052806040518060400160405280600b81526020017f6578706972795f64617465000000000000000000000000000000000000000000815250815260200160418152602001604681526020016006815250908060018154018082558091505060019003906000526020600020906004020160009091909190915060008201518160000190816200079a919062000cec565b506020820151816001015560408201518160020155606082015181600301555050565b620007cd6200085360201b60201c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200083f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008369062000e5a565b60405180910390fd5b6200085081620001d160201b60201c565b50565b62000863620001c960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000889620008e460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620008e2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008d99062000ecc565b60405180910390fd5b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620009408262000913565b9050919050565b6000620009548262000933565b9050919050565b620009668162000947565b81146200097257600080fd5b50565b60008151905062000986816200095b565b92915050565b6000620009998262000933565b9050919050565b620009ab816200098c565b8114620009b757600080fd5b50565b600081519050620009cb81620009a0565b92915050565b6000620009de8262000933565b9050919050565b620009f081620009d1565b8114620009fc57600080fd5b50565b60008151905062000a1081620009e5565b92915050565b60008060006060848603121562000a325762000a316200090e565b5b600062000a428682870162000975565b935050602062000a5586828701620009ba565b925050604062000a6886828701620009ff565b9150509250925092565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000af457607f821691505b60208210810362000b0a5762000b0962000aac565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000b747fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000b35565b62000b80868362000b35565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000bcd62000bc762000bc18462000b98565b62000ba2565b62000b98565b9050919050565b6000819050919050565b62000be98362000bac565b62000c0162000bf88262000bd4565b84845462000b42565b825550505050565b600090565b62000c1862000c09565b62000c2581848462000bde565b505050565b5b8181101562000c4d5762000c4160008262000c0e565b60018101905062000c2b565b5050565b601f82111562000c9c5762000c668162000b10565b62000c718462000b25565b8101602085101562000c81578190505b62000c9962000c908562000b25565b83018262000c2a565b50505b505050565b600082821c905092915050565b600062000cc16000198460080262000ca1565b1980831691505092915050565b600062000cdc838362000cae565b9150826002028217905092915050565b62000cf78262000a72565b67ffffffffffffffff81111562000d135762000d1262000a7d565b5b62000d1f825462000adb565b62000d2c82828562000c51565b600060209050601f83116001811462000d64576000841562000d4f578287015190505b62000d5b858262000cce565b86555062000dcb565b601f19841662000d748662000b10565b60005b8281101562000d9e5784890151825560018201915060208501945060208101905062000d77565b8683101562000dbe578489015162000dba601f89168262000cae565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600062000e4260268362000dd3565b915062000e4f8262000de4565b604082019050919050565b6000602082019050818103600083015262000e758162000e33565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000eb460208362000dd3565b915062000ec18262000e7c565b602082019050919050565b6000602082019050818103600083015262000ee78162000ea5565b9050919050565b608051615e6462000f11600039600081816108b40152610cea0152615e646000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c8063715018a6116100f9578063b88d4fde11610097578063d9548e5311610071578063d9548e5314610530578063dc54daf014610560578063e985e9c514610590578063f2fde38b146105c0576101c4565b8063b88d4fde146104b4578063c87b56dd146104d0578063d21e82ab14610500576101c4565b806395d89b41116100d357806395d89b411461042b578063a22cb46514610449578063a969d56b14610465578063b04e3a3b14610481576101c4565b8063715018a6146103e55780637b103999146103ef5780638da5cb5b1461040d576101c4565b80632f745c59116101665780634f6ccce7116101405780634f6ccce71461032557806363382d4a146103555780636352211e1461038557806370a08231146103b5576101c4565b80632f745c59146102bb5780633a41515f146102eb57806342842e0e14610309576101c4565b8063095ea7b3116101a2578063095ea7b31461024757806318160ddd1461026357806323b872dd146102815780632b7ac3f31461029d576101c4565b806301ffc9a7146101c957806306fdde03146101f9578063081812fc14610217575b600080fd5b6101e360048036038101906101de91906135d4565b6105dc565b6040516101f0919061361c565b60405180910390f35b610201610656565b60405161020e91906136c7565b60405180910390f35b610231600480360381019061022c919061371f565b6106e8565b60405161023e919061378d565b60405180910390f35b610261600480360381019061025c91906137d4565b61072e565b005b61026b610845565b6040516102789190613823565b60405180910390f35b61029b6004803603810190610296919061383e565b610852565b005b6102a56108b2565b6040516102b291906138f0565b60405180910390f35b6102d560048036038101906102d091906137d4565b6108d6565b6040516102e29190613823565b60405180910390f35b6102f361097b565b604051610300919061392c565b60405180910390f35b610323600480360381019061031e919061383e565b6109a1565b005b61033f600480360381019061033a919061371f565b6109c1565b60405161034c9190613823565b60405180910390f35b61036f600480360381019061036a9190613a7d565b610a32565b60405161037c9190613b55565b60405180910390f35b61039f600480360381019061039a919061371f565b610a9f565b6040516103ac919061378d565b60405180910390f35b6103cf60048036038101906103ca9190613b70565b610b25565b6040516103dc9190613823565b60405180910390f35b6103ed610bdc565b005b6103f7610bf0565b6040516104049190613bbe565b60405180910390f35b610415610c16565b604051610422919061378d565b60405180910390f35b610433610c40565b60405161044091906136c7565b60405180910390f35b610463600480360381019061045e9190613c05565b610cd2565b005b61047f600480360381019061047a9190613da7565b610ce8565b005b61049b6004803603810190610496919061371f565b6112dc565b6040516104ab9493929190613e10565b60405180910390f35b6104ce60048036038101906104c99190613f11565b6113a4565b005b6104ea60048036038101906104e5919061371f565b611406565b6040516104f791906136c7565b60405180910390f35b61051a6004803603810190610515919061371f565b611a73565b604051610527919061361c565b60405180910390f35b61054a6004803603810190610545919061371f565b611a93565b604051610557919061361c565b60405180910390f35b61057a60048036038101906105759190614045565b611c45565b60405161058791906140c7565b60405180910390f35b6105aa60048036038101906105a591906140e9565b611da5565b6040516105b7919061361c565b60405180910390f35b6105da60048036038101906105d59190613b70565b611e39565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061064f575061064e82611ebc565b5b9050919050565b60606000805461066590614158565b80601f016020809104026020016040519081016040528092919081815260200182805461069190614158565b80156106de5780601f106106b3576101008083540402835291602001916106de565b820191906000526020600020905b8154815290600101906020018083116106c157829003601f168201915b5050505050905090565b60006106f382611f9e565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061073982610a9f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036107a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a0906141fb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166107c8611fe9565b73ffffffffffffffffffffffffffffffffffffffff1614806107f757506107f6816107f1611fe9565b611da5565b5b610836576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d9061428d565b60405180910390fd5b6108408383611ff1565b505050565b6000600880549050905090565b61086361085d611fe9565b826120aa565b6108a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108999061431f565b60405180910390fd5b6108ad83838361213f565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006108e183610b25565b8210610922576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610919906143b1565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6109bc838383604051806020016040528060008152506113a4565b505050565b60006109cb610845565b8210610a0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0390614443565b60405180910390fd5b60088281548110610a2057610a1f614463565b5b90600052602060002001549050919050565b610a3a613546565b610a42613546565b60005b6003811015610a9557838160068110610a6157610a60614463565b5b6020020151828260038110610a7957610a78614463565b5b6020020181815250508080610a8d906144c1565b915050610a45565b5080915050919050565b600080610aab83612438565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610b1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1390614555565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8c906145e7565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610be4612475565b610bee60006124f3565b565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610c4f90614158565b80601f0160208091040260200160405190810160405280929190818152602001828054610c7b90614158565b8015610cc85780601f10610c9d57610100808354040283529160200191610cc8565b820191906000526020600020905b815481529060010190602001808311610cab57829003601f168201915b5050505050905090565b610ce4610cdd611fe9565b83836125b9565b5050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f398789b858585856040518563ffffffff1660e01b8152600401610d47949392919061480d565b602060405180830381865afa158015610d64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d889190614869565b610dc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbe906148e2565b60405180910390fd5b600d600082600360068110610ddf57610dde614463565b5b6020020151815260200190815260200160002060009054906101000a900460ff1615610e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e379061494e565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306c8442b82600460068110610e9257610e91614463565b5b602002015160001b6040518263ffffffff1660e01b8152600401610eb69190614987565b602060405180830381865afa158015610ed3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef79190614869565b610f36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2d906149ee565b60405180910390fd5b60008160016006610f479190614a0e565b60068110610f5857610f57614463565b5b602002015190506000610f69610845565b9050610f758282612725565b6001600d600085600360068110610f8f57610f8e614463565b5b6020020151815260200190815260200160002060006101000a81548160ff0219169083151502179055506000610fc484610a32565b90506000610fd182611c45565b90506000600f6000858152602001908152602001600020905060005b600e805490508110156112d0576000600e82815481106110105761100f614463565b5b906000526020600020906004020160405180608001604052908160008201805461103990614158565b80601f016020809104026020016040519081016040528092919081815260200182805461106590614158565b80156110b25780601f10611087576101008083540402835291602001916110b2565b820191906000526020600020905b81548152906001019060200180831161109557829003601f168201915b505050505081526020016001820154815260200160028201548152602001600382015481525050905060006001826020015183604001516110f39190614a0e565b6110fd9190614a42565b67ffffffffffffffff8111156111165761111561394c565b5b6040519080825280601f01601f1916602001820160405280156111485781602001600182028036833780820191505090505b5090506000826020015190505b826040015181116111e25785818151811061117357611172614463565b5b602001015160f81c60f81b8284602001518361118f9190614a0e565b815181106111a05761119f614463565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806111da906144c1565b915050611155565b506000819050808560000185600781106111ff576111fe614463565b5b01908161120c9190614c18565b506112ba836000015186600001866007811061122b5761122a614463565b5b01805461123790614158565b80601f016020809104026020016040519081016040528092919081815260200182805461126390614158565b80156112b05780601f10611285576101008083540402835291602001916112b0565b820191906000526020600020905b81548152906001019060200180831161129357829003601f168201915b5050505050612942565b50505080806112c8906144c1565b915050610fed565b50505050505050505050565b600e81815481106112ec57600080fd5b906000526020600020906004020160009150905080600001805461130f90614158565b80601f016020809104026020016040519081016040528092919081815260200182805461133b90614158565b80156113885780601f1061135d57610100808354040283529160200191611388565b820191906000526020600020905b81548152906001019060200180831161136b57829003601f168201915b5050505050908060010154908060020154908060030154905084565b6113b56113af611fe9565b836120aa565b6113f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113eb9061431f565b60405180910390fd5b611400848484846129de565b50505050565b606061141182612a3a565b611450576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144790614d5c565b60405180910390fd5b6000600f600084815260200190815260200160002060405180602001604052908160008201600780602002604051908101604052809291906000905b8282101561152f5783820180546114a290614158565b80601f01602080910402602001604051908101604052809291908181526020018280546114ce90614158565b801561151b5780601f106114f05761010080835404028352916020019161151b565b820191906000526020600020905b8154815290600101906020018083116114fe57829003601f168201915b50505050508152602001906001019061148c565b505050508152505090506115946040518060400160405280601981526020017f49737375696e6720737461746520696e20746f6b656e55524900000000000000815250826000015160006007811061158a57611589614463565b5b6020020151612942565b606080600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630903cd0284600001516001600781106115ed576115ec614463565b5b60200201516040518263ffffffff1660e01b815260040161160e91906136c7565b600060405180830381865afa15801561162b573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906116549190614e1d565b80925081935050506000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663028143ed85600001516000600781106116b4576116b3614463565b5b60200201516040518263ffffffff1660e01b81526004016116d591906136c7565b600060405180830381865afa1580156116f2573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061171b9190614e95565b8383866000015160026007811061173557611734614463565b5b6020020151600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663028143ed89600001516003600781106117905761178f614463565b5b60200201516040518263ffffffff1660e01b81526004016117b191906136c7565b600060405180830381865afa1580156117ce573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906117f79190614e95565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb0870ee8a6000015160046007811061184d5761184c614463565b5b60200201516040518263ffffffff1660e01b815260040161186e91906136c7565b600060405180830381865afa15801561188b573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906118b49190614e95565b89600001516005600781106118cc576118cb614463565b5b6020020151600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb0870ee8c6000015160066007811061192757611926614463565b5b60200201516040518263ffffffff1660e01b815260040161194891906136c7565b600060405180830381865afa158015611965573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061198e9190614e95565b6119978e611a93565b6119d6576040518060400160405280600281526020017f4e6f000000000000000000000000000000000000000000000000000000000000815250611a0d565b6040518060400160405280600381526020017f59657300000000000000000000000000000000000000000000000000000000008152505b611a168f612a7b565b604051602001611a2f9a99989796959493929190615530565b6040516020818303038152906040529050611a4981612b49565b604051602001611a5991906156a2565b604051602081830303815290604052945050505050919050565b600d6020528060005260406000206000915054906101000a900460ff1681565b600080600f600084815260200190815260200160002060405180602001604052908160008201600780602002604051908101604052809291906000905b82821015611b73578382018054611ae690614158565b80601f0160208091040260200160405190810160405280929190818152602001828054611b1290614158565b8015611b5f5780601f10611b3457610100808354040283529160200191611b5f565b820191906000526020600020905b815481529060010190602001808311611b4257829003601f168201915b505050505081526020019060010190611ad0565b505050508152505090506000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fc0bb5d48360000151600660078110611bd557611bd4614463565b5b60200201516040518263ffffffff1660e01b8152600401611bf691906136c7565b602060405180830381865afa158015611c13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c3791906156d9565b905080421192505050919050565b606060006040518060600160405280601f60ff168152602001601f60ff168152602001601a60ff1681525090506000605867ffffffffffffffff811115611c8f57611c8e61394c565b5b6040519080825280601f01601f191660200182016040528015611cc15781602001600182028036833780820191505090505b5090506000805b6003811015611d99576000868260038110611ce657611ce5614463565b5b6020020151905060005b858360038110611d0357611d02614463565b5b602002015160ff168160ff161015611d845760ff821660f81b858580611d28906144c1565b965081518110611d3b57611d3a614463565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600882901c91508080611d7c90615713565b915050611cf0565b50508080611d91906144c1565b915050611cc8565b50819350505050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611e41612475565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611eb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea7906157ae565b60405180910390fd5b611eb9816124f3565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611f8757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611f975750611f9682612ccd565b5b9050919050565b611fa781612a3a565b611fe6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fdd90614555565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661206483610a9f565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000806120b683610a9f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806120f857506120f78185611da5565b5b8061213657508373ffffffffffffffffffffffffffffffffffffffff1661211e846106e8565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661215f82610a9f565b73ffffffffffffffffffffffffffffffffffffffff16146121b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ac90615840565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612224576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221b906158d2565b60405180910390fd5b6122318383836001612d37565b8273ffffffffffffffffffffffffffffffffffffffff1661225182610a9f565b73ffffffffffffffffffffffffffffffffffffffff16146122a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229e90615840565b60405180910390fd5b6004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46124338383836001612db8565b505050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b61247d611fe9565b73ffffffffffffffffffffffffffffffffffffffff1661249b610c16565b73ffffffffffffffffffffffffffffffffffffffff16146124f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e89061593e565b60405180910390fd5b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612627576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261e906159aa565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612718919061361c565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612794576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278b90615a16565b60405180910390fd5b61279d81612a3a565b156127dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d490615a82565b60405180910390fd5b6127eb600083836001612d37565b6127f481612a3a565b15612834576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282b90615a82565b60405180910390fd5b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461293e600083836001612db8565b5050565b6129da8282604051602401612958929190615aa2565b6040516020818303038152906040527f4b5c4277000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612dbe565b5050565b6129e984848461213f565b6129f584848484612ddf565b612a34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2b90615b4b565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff16612a5c83612438565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b606060006001612a8a84612f66565b01905060008167ffffffffffffffff811115612aa957612aa861394c565b5b6040519080825280601f01601f191660200182016040528015612adb5781602001600182028036833780820191505090505b509050600082602001820190505b600115612b3e578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581612b3257612b31615b6b565b5b04945060008503612ae9575b819350505050919050565b60606000825103612b6b57604051806020016040528060008152509050612cc8565b6000604051806060016040528060408152602001615def6040913990506000600360028551612b9a9190614a42565b612ba49190615b9a565b6004612bb09190615bcb565b90506000602082612bc19190614a42565b67ffffffffffffffff811115612bda57612bd961394c565b5b6040519080825280601f01601f191660200182016040528015612c0c5781602001600182028036833780820191505090505b509050818152600183018586518101602084015b81831015612c87576003830192508251603f8160121c1685015160f81b8252600182019150603f81600c1c1685015160f81b8252600182019150603f8160061c1685015160f81b8252600182019150603f811685015160f81b825260018201915050612c20565b600389510660018114612ca15760028114612cb157612cbc565b613d3d60f01b6002830352612cbc565b603d60f81b60018303525b50505050508093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612d43848484846130b9565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614612db2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da990615c7f565b60405180910390fd5b50505050565b50505050565b60006a636f6e736f6c652e6c6f679050600080835160208501845afa505050565b6000612e008473ffffffffffffffffffffffffffffffffffffffff16613217565b15612f59578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612e29611fe9565b8786866040518563ffffffff1660e01b8152600401612e4b9493929190615c9f565b6020604051808303816000875af1925050508015612e8757506040513d601f19601f82011682018060405250810190612e849190615d00565b60015b612f09573d8060008114612eb7576040519150601f19603f3d011682016040523d82523d6000602084013e612ebc565b606091505b506000815103612f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef890615b4b565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612f5e565b600190505b949350505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612fc4577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381612fba57612fb9615b6b565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310613001576d04ee2d6d415b85acef81000000008381612ff757612ff6615b6b565b5b0492506020810190505b662386f26fc10000831061303057662386f26fc10000838161302657613025615b6b565b5b0492506010810190505b6305f5e1008310613059576305f5e100838161304f5761304e615b6b565b5b0492506008810190505b612710831061307e57612710838161307457613073615b6b565b5b0492506004810190505b606483106130a1576064838161309757613096615b6b565b5b0492506002810190505b600a83106130b0576001810190505b80915050919050565b6130c58484848461323a565b6001811115613109576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161310090615d9f565b60405180910390fd5b6000829050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036131505761314b81613240565b61318f565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161461318e5761318d8582613289565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036131d1576131cc816133f6565b613210565b8473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461320f5761320e84826134c7565b5b5b5050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b50505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161329684610b25565b6132a09190614a0e565b9050600060076000848152602001908152602001600020549050818114613385576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061340a9190614a0e565b905060006009600084815260200190815260200160002054905060006008838154811061343a57613439614463565b5b90600052602060002001549050806008838154811061345c5761345b614463565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806134ab576134aa615dbf565b5b6001900381819060005260206000200160009055905550505050565b60006134d283610b25565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6040518060600160405280600390602082028036833780820191505090505090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6135b18161357c565b81146135bc57600080fd5b50565b6000813590506135ce816135a8565b92915050565b6000602082840312156135ea576135e9613572565b5b60006135f8848285016135bf565b91505092915050565b60008115159050919050565b61361681613601565b82525050565b6000602082019050613631600083018461360d565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613671578082015181840152602081019050613656565b60008484015250505050565b6000601f19601f8301169050919050565b600061369982613637565b6136a38185613642565b93506136b3818560208601613653565b6136bc8161367d565b840191505092915050565b600060208201905081810360008301526136e1818461368e565b905092915050565b6000819050919050565b6136fc816136e9565b811461370757600080fd5b50565b600081359050613719816136f3565b92915050565b60006020828403121561373557613734613572565b5b60006137438482850161370a565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006137778261374c565b9050919050565b6137878161376c565b82525050565b60006020820190506137a2600083018461377e565b92915050565b6137b18161376c565b81146137bc57600080fd5b50565b6000813590506137ce816137a8565b92915050565b600080604083850312156137eb576137ea613572565b5b60006137f9858286016137bf565b925050602061380a8582860161370a565b9150509250929050565b61381d816136e9565b82525050565b60006020820190506138386000830184613814565b92915050565b60008060006060848603121561385757613856613572565b5b6000613865868287016137bf565b9350506020613876868287016137bf565b92505060406138878682870161370a565b9150509250925092565b6000819050919050565b60006138b66138b16138ac8461374c565b613891565b61374c565b9050919050565b60006138c88261389b565b9050919050565b60006138da826138bd565b9050919050565b6138ea816138cf565b82525050565b600060208201905061390560008301846138e1565b92915050565b6000613916826138bd565b9050919050565b6139268161390b565b82525050565b6000602082019050613941600083018461391d565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6139848261367d565b810181811067ffffffffffffffff821117156139a3576139a261394c565b5b80604052505050565b60006139b6613568565b90506139c2828261397b565b919050565b600067ffffffffffffffff8211156139e2576139e161394c565b5b602082029050919050565b600080fd5b6000613a05613a00846139c7565b6139ac565b90508060208402830185811115613a1f57613a1e6139ed565b5b835b81811015613a485780613a34888261370a565b845260208401935050602081019050613a21565b5050509392505050565b600082601f830112613a6757613a66613947565b5b6006613a748482856139f2565b91505092915050565b600060c08284031215613a9357613a92613572565b5b6000613aa184828501613a52565b91505092915050565b600060039050919050565b600081905092915050565b6000819050919050565b613ad3816136e9565b82525050565b6000613ae58383613aca565b60208301905092915050565b6000602082019050919050565b613b0781613aaa565b613b118184613ab5565b9250613b1c82613ac0565b8060005b83811015613b4d578151613b348782613ad9565b9650613b3f83613af1565b925050600181019050613b20565b505050505050565b6000606082019050613b6a6000830184613afe565b92915050565b600060208284031215613b8657613b85613572565b5b6000613b94848285016137bf565b91505092915050565b6000613ba8826138bd565b9050919050565b613bb881613b9d565b82525050565b6000602082019050613bd36000830184613baf565b92915050565b613be281613601565b8114613bed57600080fd5b50565b600081359050613bff81613bd9565b92915050565b60008060408385031215613c1c57613c1b613572565b5b6000613c2a858286016137bf565b9250506020613c3b85828601613bf0565b9150509250929050565b600067ffffffffffffffff821115613c6057613c5f61394c565b5b602082029050919050565b6000613c7e613c7984613c45565b6139ac565b90508060208402830185811115613c9857613c976139ed565b5b835b81811015613cc15780613cad888261370a565b845260208401935050602081019050613c9a565b5050509392505050565b600082601f830112613ce057613cdf613947565b5b6002613ced848285613c6b565b91505092915050565b600067ffffffffffffffff821115613d1157613d1061394c565b5b602082029050919050565b6000613d2f613d2a84613cf6565b6139ac565b90508060408402830185811115613d4957613d486139ed565b5b835b81811015613d725780613d5e8882613ccb565b845260208401935050604081019050613d4b565b5050509392505050565b600082601f830112613d9157613d90613947565b5b6002613d9e848285613d1c565b91505092915050565b6000806000806101c08587031215613dc257613dc1613572565b5b6000613dd087828801613ccb565b9450506040613de187828801613d7c565b93505060c0613df287828801613ccb565b925050610100613e0487828801613a52565b91505092959194509250565b60006080820190508181036000830152613e2a818761368e565b9050613e396020830186613814565b613e466040830185613814565b613e536060830184613814565b95945050505050565b600080fd5b600067ffffffffffffffff821115613e7c57613e7b61394c565b5b613e858261367d565b9050602081019050919050565b82818337600083830152505050565b6000613eb4613eaf84613e61565b6139ac565b905082815260208101848484011115613ed057613ecf613e5c565b5b613edb848285613e92565b509392505050565b600082601f830112613ef857613ef7613947565b5b8135613f08848260208601613ea1565b91505092915050565b60008060008060808587031215613f2b57613f2a613572565b5b6000613f39878288016137bf565b9450506020613f4a878288016137bf565b9350506040613f5b8782880161370a565b925050606085013567ffffffffffffffff811115613f7c57613f7b613577565b5b613f8887828801613ee3565b91505092959194509250565b600067ffffffffffffffff821115613faf57613fae61394c565b5b602082029050919050565b6000613fcd613fc884613f94565b6139ac565b90508060208402830185811115613fe757613fe66139ed565b5b835b818110156140105780613ffc888261370a565b845260208401935050602081019050613fe9565b5050509392505050565b600082601f83011261402f5761402e613947565b5b600361403c848285613fba565b91505092915050565b60006060828403121561405b5761405a613572565b5b60006140698482850161401a565b91505092915050565b600081519050919050565b600082825260208201905092915050565b600061409982614072565b6140a3818561407d565b93506140b3818560208601613653565b6140bc8161367d565b840191505092915050565b600060208201905081810360008301526140e1818461408e565b905092915050565b60008060408385031215614100576140ff613572565b5b600061410e858286016137bf565b925050602061411f858286016137bf565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061417057607f821691505b60208210810361418357614182614129565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006141e5602183613642565b91506141f082614189565b604082019050919050565b60006020820190508181036000830152614214816141d8565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b6000614277603d83613642565b91506142828261421b565b604082019050919050565b600060208201905081810360008301526142a68161426a565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b6000614309602d83613642565b9150614314826142ad565b604082019050919050565b60006020820190508181036000830152614338816142fc565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b600061439b602b83613642565b91506143a68261433f565b604082019050919050565b600060208201905081810360008301526143ca8161438e565b9050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b600061442d602c83613642565b9150614438826143d1565b604082019050919050565b6000602082019050818103600083015261445c81614420565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006144cc826136e9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036144fe576144fd614492565b5b600182019050919050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b600061453f601883613642565b915061454a82614509565b602082019050919050565b6000602082019050818103600083015261456e81614532565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b60006145d1602983613642565b91506145dc82614575565b604082019050919050565b60006020820190508181036000830152614600816145c4565b9050919050565b600060029050919050565b600081905092915050565b6000819050919050565b6000602082019050919050565b61463d81614607565b6146478184614612565b92506146528261461d565b8060005b8381101561468357815161466a8782613ad9565b965061467583614627565b925050600181019050614656565b505050505050565b600060029050919050565b600081905092915050565b6000819050919050565b600081905092915050565b6146bf81614607565b6146c981846146ab565b92506146d48261461d565b8060005b838110156147055781516146ec8782613ad9565b96506146f783614627565b9250506001810190506146d8565b505050505050565b600061471983836146b6565b60408301905092915050565b6000602082019050919050565b61473b8161468b565b6147458184614696565b9250614750826146a1565b8060005b83811015614781578151614768878261470d565b965061477383614725565b925050600181019050614754565b505050505050565b600060069050919050565b600081905092915050565b6000819050919050565b6000602082019050919050565b6147bf81614789565b6147c98184614794565b92506147d48261479f565b8060005b838110156148055781516147ec8782613ad9565b96506147f7836147a9565b9250506001810190506147d8565b505050505050565b60006101c0820190506148236000830187614634565b6148306040830186614732565b61483d60c0830185614634565b61484b6101008301846147b6565b95945050505050565b60008151905061486381613bd9565b92915050565b60006020828403121561487f5761487e613572565b5b600061488d84828501614854565b91505092915050565b7f496e76616c69642050726f6f6600000000000000000000000000000000000000600082015250565b60006148cc600d83613642565b91506148d782614896565b602082019050919050565b600060208201905081810360008301526148fb816148bf565b9050919050565b7f5369676e617475726520616c7265616479206e756c6c69666965640000000000600082015250565b6000614938601b83613642565b915061494382614902565b602082019050919050565b600060208201905081810360008301526149678161492b565b9050919050565b6000819050919050565b6149818161496e565b82525050565b600060208201905061499c6000830184614978565b92915050565b7f496e76616c6964206d65726b6c6520726f6f7400000000000000000000000000600082015250565b60006149d8601383613642565b91506149e3826149a2565b602082019050919050565b60006020820190508181036000830152614a07816149cb565b9050919050565b6000614a19826136e9565b9150614a24836136e9565b9250828203905081811115614a3c57614a3b614492565b5b92915050565b6000614a4d826136e9565b9150614a58836136e9565b9250828201905080821115614a7057614a6f614492565b5b92915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302614ad87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614a9b565b614ae28683614a9b565b95508019841693508086168417925050509392505050565b6000614b15614b10614b0b846136e9565b613891565b6136e9565b9050919050565b6000819050919050565b614b2f83614afa565b614b43614b3b82614b1c565b848454614aa8565b825550505050565b600090565b614b58614b4b565b614b63818484614b26565b505050565b5b81811015614b8757614b7c600082614b50565b600181019050614b69565b5050565b601f821115614bcc57614b9d81614a76565b614ba684614a8b565b81016020851015614bb5578190505b614bc9614bc185614a8b565b830182614b68565b50505b505050565b600082821c905092915050565b6000614bef60001984600802614bd1565b1980831691505092915050565b6000614c088383614bde565b9150826002028217905092915050565b614c2182613637565b67ffffffffffffffff811115614c3a57614c3961394c565b5b614c448254614158565b614c4f828285614b8b565b600060209050601f831160018114614c825760008415614c70578287015190505b614c7a8582614bfc565b865550614ce2565b601f198416614c9086614a76565b60005b82811015614cb857848901518255600182019150602085019450602081019050614c93565b86831015614cd55784890151614cd1601f891682614bde565b8355505b6001600288020188555050505b505050505050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614d46602f83613642565b9150614d5182614cea565b604082019050919050565b60006020820190508181036000830152614d7581614d39565b9050919050565b600067ffffffffffffffff821115614d9757614d9661394c565b5b614da08261367d565b9050602081019050919050565b6000614dc0614dbb84614d7c565b6139ac565b905082815260208101848484011115614ddc57614ddb613e5c565b5b614de7848285613653565b509392505050565b600082601f830112614e0457614e03613947565b5b8151614e14848260208601614dad565b91505092915050565b60008060408385031215614e3457614e33613572565b5b600083015167ffffffffffffffff811115614e5257614e51613577565b5b614e5e85828601614def565b925050602083015167ffffffffffffffff811115614e7f57614e7e613577565b5b614e8b85828601614def565b9150509250929050565b600060208284031215614eab57614eaa613572565b5b600082015167ffffffffffffffff811115614ec957614ec8613577565b5b614ed584828501614def565b91505092915050565b600081905092915050565b7f7b202261747472696275746573223a205b000000000000000000000000000000600082015250565b6000614f1f601183614ede565b9150614f2a82614ee9565b601182019050919050565b7f7b2274726169745f74797065223a202249737375696e67205374617465222c2060008201527f2276616c7565223a202200000000000000000000000000000000000000000000602082015250565b6000614f91602a83614ede565b9150614f9c82614f35565b602a82019050919050565b6000614fb282613637565b614fbc8185614ede565b9350614fcc818560208601613653565b80840191505092915050565b7f227d2c7b2274726169745f74797065223a202246697273744e616d65222c202260008201527f76616c7565223a20220000000000000000000000000000000000000000000000602082015250565b6000615034602983614ede565b915061503f82614fd8565b602982019050919050565b7f227d2c7b2274726169745f74797065223a20224c6173744e616d65222c20227660008201527f616c7565223a2022000000000000000000000000000000000000000000000000602082015250565b60006150a6602883614ede565b91506150b18261504a565b602882019050919050565b7f227d2c7b2274726169745f74797065223a202250617373706f7274204e756d6260008201527f6572222c202276616c7565223a20220000000000000000000000000000000000602082015250565b6000615118602f83614ede565b9150615123826150bc565b602f82019050919050565b7f227d2c7b2274726169745f74797065223a20224e6174696f6e616c697479222c60008201527f202276616c7565223a2022000000000000000000000000000000000000000000602082015250565b600061518a602b83614ede565b91506151958261512e565b602b82019050919050565b7f227d2c7b2274726169745f74797065223a202244617465206f6620626972746860008201527f222c202276616c7565223a202200000000000000000000000000000000000000602082015250565b60006151fc602d83614ede565b9150615207826151a0565b602d82019050919050565b7f227d2c7b2274726169745f74797065223a202247656e646572222c202276616c60008201527f7565223a20220000000000000000000000000000000000000000000000000000602082015250565b600061526e602683614ede565b915061527982615212565b602682019050919050565b7f227d2c7b2274726169745f74797065223a20224578706972792064617465222c60008201527f202276616c7565223a2022000000000000000000000000000000000000000000602082015250565b60006152e0602b83614ede565b91506152eb82615284565b602b82019050919050565b7f227d2c7b2274726169745f74797065223a202245787069726564222c2022766160008201527f6c7565223a202200000000000000000000000000000000000000000000000000602082015250565b6000615352602783614ede565b915061535d826152f6565b602782019050919050565b7f227d000000000000000000000000000000000000000000000000000000000000600082015250565b600061539e600283614ede565b91506153a982615368565b600282019050919050565b7f5d2c000000000000000000000000000000000000000000000000000000000000600082015250565b60006153ea600283614ede565b91506153f5826153b4565b600282019050919050565b7f226465736372697074696f6e223a202250726f6f66206f662050617373706f7260008201527f742067756172616e7465657320706f7373657373696f6e206f6620612076616c60208201527f69642070617373706f72742e222c2265787465726e616c5f75726c223a20226860408201527f747470733a2f2f6769746875622e636f6d2f7a6b2d70617373706f72742f707260608201527f6f6f662d6f662d70617373706f7274222c22696d616765223a2022687474707360808201527f3a2f2f692e696d6775722e636f6d2f396b766574696a2e706e67222c226e616d60a08201527f65223a202250726f6f66206f662050617373706f72742023000000000000000060c082015250565b600061551a60d883614ede565b915061552582615400565b60d882019050919050565b600061553b82614f12565b915061554682614f84565b9150615552828d614fa7565b915061555d82615027565b9150615569828c614fa7565b915061557482615099565b9150615580828b614fa7565b915061558b8261510b565b9150615597828a614fa7565b91506155a28261517d565b91506155ae8289614fa7565b91506155b9826151ef565b91506155c58288614fa7565b91506155d082615261565b91506155dc8287614fa7565b91506155e7826152d3565b91506155f38286614fa7565b91506155fe82615345565b915061560a8285614fa7565b915061561582615391565b9150615620826153dd565b915061562b8261550d565b91506156378284614fa7565b915061564282615391565b91508190509b9a5050505050505050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b600061568c601d83614ede565b915061569782615656565b601d82019050919050565b60006156ad8261567f565b91506156b98284614fa7565b915081905092915050565b6000815190506156d3816136f3565b92915050565b6000602082840312156156ef576156ee613572565b5b60006156fd848285016156c4565b91505092915050565b600060ff82169050919050565b600061571e82615706565b915060ff820361573157615730614492565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615798602683613642565b91506157a38261573c565b604082019050919050565b600060208201905081810360008301526157c78161578b565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b600061582a602583613642565b9150615835826157ce565b604082019050919050565b600060208201905081810360008301526158598161581d565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006158bc602483613642565b91506158c782615860565b604082019050919050565b600060208201905081810360008301526158eb816158af565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000615928602083613642565b9150615933826158f2565b602082019050919050565b600060208201905081810360008301526159578161591b565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000615994601983613642565b915061599f8261595e565b602082019050919050565b600060208201905081810360008301526159c381615987565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000615a00602083613642565b9150615a0b826159ca565b602082019050919050565b60006020820190508181036000830152615a2f816159f3565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000615a6c601c83613642565b9150615a7782615a36565b602082019050919050565b60006020820190508181036000830152615a9b81615a5f565b9050919050565b60006040820190508181036000830152615abc818561368e565b90508181036020830152615ad0818461368e565b90509392505050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000615b35603283613642565b9150615b4082615ad9565b604082019050919050565b60006020820190508181036000830152615b6481615b28565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615ba5826136e9565b9150615bb0836136e9565b925082615bc057615bbf615b6b565b5b828204905092915050565b6000615bd6826136e9565b9150615be1836136e9565b9250828202615bef816136e9565b91508282048414831517615c0657615c05614492565b5b5092915050565b7f43616e6e6f74207472616e73666572202d2050726f6f66206f6620506173737060008201527f6f727420697320736f756c626f756e6400000000000000000000000000000000602082015250565b6000615c69603083613642565b9150615c7482615c0d565b604082019050919050565b60006020820190508181036000830152615c9881615c5c565b9050919050565b6000608082019050615cb4600083018761377e565b615cc1602083018661377e565b615cce6040830185613814565b8181036060830152615ce0818461408e565b905095945050505050565b600081519050615cfa816135a8565b92915050565b600060208284031215615d1657615d15613572565b5b6000615d2484828501615ceb565b91505092915050565b7f455243373231456e756d657261626c653a20636f6e736563757469766520747260008201527f616e7366657273206e6f7420737570706f727465640000000000000000000000602082015250565b6000615d89603583613642565b9150615d9482615d2d565b604082019050919050565b60006020820190508181036000830152615db881615d7c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa264697066735822122046d27b34599feaff8b765cb2832c4856d7912bd8b4fd348a5d476c60456ad99664736f6c63430008120033",
"deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101c45760003560e01c8063715018a6116100f9578063b88d4fde11610097578063d9548e5311610071578063d9548e5314610530578063dc54daf014610560578063e985e9c514610590578063f2fde38b146105c0576101c4565b8063b88d4fde146104b4578063c87b56dd146104d0578063d21e82ab14610500576101c4565b806395d89b41116100d357806395d89b411461042b578063a22cb46514610449578063a969d56b14610465578063b04e3a3b14610481576101c4565b8063715018a6146103e55780637b103999146103ef5780638da5cb5b1461040d576101c4565b80632f745c59116101665780634f6ccce7116101405780634f6ccce71461032557806363382d4a146103555780636352211e1461038557806370a08231146103b5576101c4565b80632f745c59146102bb5780633a41515f146102eb57806342842e0e14610309576101c4565b8063095ea7b3116101a2578063095ea7b31461024757806318160ddd1461026357806323b872dd146102815780632b7ac3f31461029d576101c4565b806301ffc9a7146101c957806306fdde03146101f9578063081812fc14610217575b600080fd5b6101e360048036038101906101de91906135d4565b6105dc565b6040516101f0919061361c565b60405180910390f35b610201610656565b60405161020e91906136c7565b60405180910390f35b610231600480360381019061022c919061371f565b6106e8565b60405161023e919061378d565b60405180910390f35b610261600480360381019061025c91906137d4565b61072e565b005b61026b610845565b6040516102789190613823565b60405180910390f35b61029b6004803603810190610296919061383e565b610852565b005b6102a56108b2565b6040516102b291906138f0565b60405180910390f35b6102d560048036038101906102d091906137d4565b6108d6565b6040516102e29190613823565b60405180910390f35b6102f361097b565b604051610300919061392c565b60405180910390f35b610323600480360381019061031e919061383e565b6109a1565b005b61033f600480360381019061033a919061371f565b6109c1565b60405161034c9190613823565b60405180910390f35b61036f600480360381019061036a9190613a7d565b610a32565b60405161037c9190613b55565b60405180910390f35b61039f600480360381019061039a919061371f565b610a9f565b6040516103ac919061378d565b60405180910390f35b6103cf60048036038101906103ca9190613b70565b610b25565b6040516103dc9190613823565b60405180910390f35b6103ed610bdc565b005b6103f7610bf0565b6040516104049190613bbe565b60405180910390f35b610415610c16565b604051610422919061378d565b60405180910390f35b610433610c40565b60405161044091906136c7565b60405180910390f35b610463600480360381019061045e9190613c05565b610cd2565b005b61047f600480360381019061047a9190613da7565b610ce8565b005b61049b6004803603810190610496919061371f565b6112dc565b6040516104ab9493929190613e10565b60405180910390f35b6104ce60048036038101906104c99190613f11565b6113a4565b005b6104ea60048036038101906104e5919061371f565b611406565b6040516104f791906136c7565b60405180910390f35b61051a6004803603810190610515919061371f565b611a73565b604051610527919061361c565b60405180910390f35b61054a6004803603810190610545919061371f565b611a93565b604051610557919061361c565b60405180910390f35b61057a60048036038101906105759190614045565b611c45565b60405161058791906140c7565b60405180910390f35b6105aa60048036038101906105a591906140e9565b611da5565b6040516105b7919061361c565b60405180910390f35b6105da60048036038101906105d59190613b70565b611e39565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061064f575061064e82611ebc565b5b9050919050565b60606000805461066590614158565b80601f016020809104026020016040519081016040528092919081815260200182805461069190614158565b80156106de5780601f106106b3576101008083540402835291602001916106de565b820191906000526020600020905b8154815290600101906020018083116106c157829003601f168201915b5050505050905090565b60006106f382611f9e565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061073982610a9f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036107a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a0906141fb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166107c8611fe9565b73ffffffffffffffffffffffffffffffffffffffff1614806107f757506107f6816107f1611fe9565b611da5565b5b610836576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082d9061428d565b60405180910390fd5b6108408383611ff1565b505050565b6000600880549050905090565b61086361085d611fe9565b826120aa565b6108a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108999061431f565b60405180910390fd5b6108ad83838361213f565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006108e183610b25565b8210610922576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610919906143b1565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6109bc838383604051806020016040528060008152506113a4565b505050565b60006109cb610845565b8210610a0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0390614443565b60405180910390fd5b60088281548110610a2057610a1f614463565b5b90600052602060002001549050919050565b610a3a613546565b610a42613546565b60005b6003811015610a9557838160068110610a6157610a60614463565b5b6020020151828260038110610a7957610a78614463565b5b6020020181815250508080610a8d906144c1565b915050610a45565b5080915050919050565b600080610aab83612438565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610b1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1390614555565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8c906145e7565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610be4612475565b610bee60006124f3565b565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610c4f90614158565b80601f0160208091040260200160405190810160405280929190818152602001828054610c7b90614158565b8015610cc85780601f10610c9d57610100808354040283529160200191610cc8565b820191906000526020600020905b815481529060010190602001808311610cab57829003601f168201915b5050505050905090565b610ce4610cdd611fe9565b83836125b9565b5050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f398789b858585856040518563ffffffff1660e01b8152600401610d47949392919061480d565b602060405180830381865afa158015610d64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d889190614869565b610dc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbe906148e2565b60405180910390fd5b600d600082600360068110610ddf57610dde614463565b5b6020020151815260200190815260200160002060009054906101000a900460ff1615610e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e379061494e565b60405180910390fd5b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306c8442b82600460068110610e9257610e91614463565b5b602002015160001b6040518263ffffffff1660e01b8152600401610eb69190614987565b602060405180830381865afa158015610ed3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef79190614869565b610f36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2d906149ee565b60405180910390fd5b60008160016006610f479190614a0e565b60068110610f5857610f57614463565b5b602002015190506000610f69610845565b9050610f758282612725565b6001600d600085600360068110610f8f57610f8e614463565b5b6020020151815260200190815260200160002060006101000a81548160ff0219169083151502179055506000610fc484610a32565b90506000610fd182611c45565b90506000600f6000858152602001908152602001600020905060005b600e805490508110156112d0576000600e82815481106110105761100f614463565b5b906000526020600020906004020160405180608001604052908160008201805461103990614158565b80601f016020809104026020016040519081016040528092919081815260200182805461106590614158565b80156110b25780601f10611087576101008083540402835291602001916110b2565b820191906000526020600020905b81548152906001019060200180831161109557829003601f168201915b505050505081526020016001820154815260200160028201548152602001600382015481525050905060006001826020015183604001516110f39190614a0e565b6110fd9190614a42565b67ffffffffffffffff8111156111165761111561394c565b5b6040519080825280601f01601f1916602001820160405280156111485781602001600182028036833780820191505090505b5090506000826020015190505b826040015181116111e25785818151811061117357611172614463565b5b602001015160f81c60f81b8284602001518361118f9190614a0e565b815181106111a05761119f614463565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535080806111da906144c1565b915050611155565b506000819050808560000185600781106111ff576111fe614463565b5b01908161120c9190614c18565b506112ba836000015186600001866007811061122b5761122a614463565b5b01805461123790614158565b80601f016020809104026020016040519081016040528092919081815260200182805461126390614158565b80156112b05780601f10611285576101008083540402835291602001916112b0565b820191906000526020600020905b81548152906001019060200180831161129357829003601f168201915b5050505050612942565b50505080806112c8906144c1565b915050610fed565b50505050505050505050565b600e81815481106112ec57600080fd5b906000526020600020906004020160009150905080600001805461130f90614158565b80601f016020809104026020016040519081016040528092919081815260200182805461133b90614158565b80156113885780601f1061135d57610100808354040283529160200191611388565b820191906000526020600020905b81548152906001019060200180831161136b57829003601f168201915b5050505050908060010154908060020154908060030154905084565b6113b56113af611fe9565b836120aa565b6113f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113eb9061431f565b60405180910390fd5b611400848484846129de565b50505050565b606061141182612a3a565b611450576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144790614d5c565b60405180910390fd5b6000600f600084815260200190815260200160002060405180602001604052908160008201600780602002604051908101604052809291906000905b8282101561152f5783820180546114a290614158565b80601f01602080910402602001604051908101604052809291908181526020018280546114ce90614158565b801561151b5780601f106114f05761010080835404028352916020019161151b565b820191906000526020600020905b8154815290600101906020018083116114fe57829003601f168201915b50505050508152602001906001019061148c565b505050508152505090506115946040518060400160405280601981526020017f49737375696e6720737461746520696e20746f6b656e55524900000000000000815250826000015160006007811061158a57611589614463565b5b6020020151612942565b606080600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630903cd0284600001516001600781106115ed576115ec614463565b5b60200201516040518263ffffffff1660e01b815260040161160e91906136c7565b600060405180830381865afa15801561162b573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906116549190614e1d565b80925081935050506000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663028143ed85600001516000600781106116b4576116b3614463565b5b60200201516040518263ffffffff1660e01b81526004016116d591906136c7565b600060405180830381865afa1580156116f2573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061171b9190614e95565b8383866000015160026007811061173557611734614463565b5b6020020151600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663028143ed89600001516003600781106117905761178f614463565b5b60200201516040518263ffffffff1660e01b81526004016117b191906136c7565b600060405180830381865afa1580156117ce573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906117f79190614e95565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb0870ee8a6000015160046007811061184d5761184c614463565b5b60200201516040518263ffffffff1660e01b815260040161186e91906136c7565b600060405180830381865afa15801561188b573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906118b49190614e95565b89600001516005600781106118cc576118cb614463565b5b6020020151600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bb0870ee8c6000015160066007811061192757611926614463565b5b60200201516040518263ffffffff1660e01b815260040161194891906136c7565b600060405180830381865afa158015611965573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061198e9190614e95565b6119978e611a93565b6119d6576040518060400160405280600281526020017f4e6f000000000000000000000000000000000000000000000000000000000000815250611a0d565b6040518060400160405280600381526020017f59657300000000000000000000000000000000000000000000000000000000008152505b611a168f612a7b565b604051602001611a2f9a99989796959493929190615530565b6040516020818303038152906040529050611a4981612b49565b604051602001611a5991906156a2565b604051602081830303815290604052945050505050919050565b600d6020528060005260406000206000915054906101000a900460ff1681565b600080600f600084815260200190815260200160002060405180602001604052908160008201600780602002604051908101604052809291906000905b82821015611b73578382018054611ae690614158565b80601f0160208091040260200160405190810160405280929190818152602001828054611b1290614158565b8015611b5f5780601f10611b3457610100808354040283529160200191611b5f565b820191906000526020600020905b815481529060010190602001808311611b4257829003601f168201915b505050505081526020019060010190611ad0565b505050508152505090506000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fc0bb5d48360000151600660078110611bd557611bd4614463565b5b60200201516040518263ffffffff1660e01b8152600401611bf691906136c7565b602060405180830381865afa158015611c13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c3791906156d9565b905080421192505050919050565b606060006040518060600160405280601f60ff168152602001601f60ff168152602001601a60ff1681525090506000605867ffffffffffffffff811115611c8f57611c8e61394c565b5b6040519080825280601f01601f191660200182016040528015611cc15781602001600182028036833780820191505090505b5090506000805b6003811015611d99576000868260038110611ce657611ce5614463565b5b6020020151905060005b858360038110611d0357611d02614463565b5b602002015160ff168160ff161015611d845760ff821660f81b858580611d28906144c1565b965081518110611d3b57611d3a614463565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600882901c91508080611d7c90615713565b915050611cf0565b50508080611d91906144c1565b915050611cc8565b50819350505050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611e41612475565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611eb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea7906157ae565b60405180910390fd5b611eb9816124f3565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611f8757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611f975750611f9682612ccd565b5b9050919050565b611fa781612a3a565b611fe6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fdd90614555565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661206483610a9f565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000806120b683610a9f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806120f857506120f78185611da5565b5b8061213657508373ffffffffffffffffffffffffffffffffffffffff1661211e846106e8565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661215f82610a9f565b73ffffffffffffffffffffffffffffffffffffffff16146121b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ac90615840565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612224576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221b906158d2565b60405180910390fd5b6122318383836001612d37565b8273ffffffffffffffffffffffffffffffffffffffff1661225182610a9f565b73ffffffffffffffffffffffffffffffffffffffff16146122a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229e90615840565b60405180910390fd5b6004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46124338383836001612db8565b505050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b61247d611fe9565b73ffffffffffffffffffffffffffffffffffffffff1661249b610c16565b73ffffffffffffffffffffffffffffffffffffffff16146124f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e89061593e565b60405180910390fd5b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612627576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261e906159aa565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612718919061361c565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612794576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278b90615a16565b60405180910390fd5b61279d81612a3a565b156127dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d490615a82565b60405180910390fd5b6127eb600083836001612d37565b6127f481612a3a565b15612834576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282b90615a82565b60405180910390fd5b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461293e600083836001612db8565b5050565b6129da8282604051602401612958929190615aa2565b6040516020818303038152906040527f4b5c4277000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612dbe565b5050565b6129e984848461213f565b6129f584848484612ddf565b612a34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2b90615b4b565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff16612a5c83612438565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b606060006001612a8a84612f66565b01905060008167ffffffffffffffff811115612aa957612aa861394c565b5b6040519080825280601f01601f191660200182016040528015612adb5781602001600182028036833780820191505090505b509050600082602001820190505b600115612b3e578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581612b3257612b31615b6b565b5b04945060008503612ae9575b819350505050919050565b60606000825103612b6b57604051806020016040528060008152509050612cc8565b6000604051806060016040528060408152602001615def6040913990506000600360028551612b9a9190614a42565b612ba49190615b9a565b6004612bb09190615bcb565b90506000602082612bc19190614a42565b67ffffffffffffffff811115612bda57612bd961394c565b5b6040519080825280601f01601f191660200182016040528015612c0c5781602001600182028036833780820191505090505b509050818152600183018586518101602084015b81831015612c87576003830192508251603f8160121c1685015160f81b8252600182019150603f81600c1c1685015160f81b8252600182019150603f8160061c1685015160f81b8252600182019150603f811685015160f81b825260018201915050612c20565b600389510660018114612ca15760028114612cb157612cbc565b613d3d60f01b6002830352612cbc565b603d60f81b60018303525b50505050508093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612d43848484846130b9565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614612db2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da990615c7f565b60405180910390fd5b50505050565b50505050565b60006a636f6e736f6c652e6c6f679050600080835160208501845afa505050565b6000612e008473ffffffffffffffffffffffffffffffffffffffff16613217565b15612f59578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612e29611fe9565b8786866040518563ffffffff1660e01b8152600401612e4b9493929190615c9f565b6020604051808303816000875af1925050508015612e8757506040513d601f19601f82011682018060405250810190612e849190615d00565b60015b612f09573d8060008114612eb7576040519150601f19603f3d011682016040523d82523d6000602084013e612ebc565b606091505b506000815103612f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef890615b4b565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612f5e565b600190505b949350505050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612fc4577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381612fba57612fb9615b6b565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310613001576d04ee2d6d415b85acef81000000008381612ff757612ff6615b6b565b5b0492506020810190505b662386f26fc10000831061303057662386f26fc10000838161302657613025615b6b565b5b0492506010810190505b6305f5e1008310613059576305f5e100838161304f5761304e615b6b565b5b0492506008810190505b612710831061307e57612710838161307457613073615b6b565b5b0492506004810190505b606483106130a1576064838161309757613096615b6b565b5b0492506002810190505b600a83106130b0576001810190505b80915050919050565b6130c58484848461323a565b6001811115613109576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161310090615d9f565b60405180910390fd5b6000829050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036131505761314b81613240565b61318f565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161461318e5761318d8582613289565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036131d1576131cc816133f6565b613210565b8473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461320f5761320e84826134c7565b5b5b5050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b50505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161329684610b25565b6132a09190614a0e565b9050600060076000848152602001908152602001600020549050818114613385576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061340a9190614a0e565b905060006009600084815260200190815260200160002054905060006008838154811061343a57613439614463565b5b90600052602060002001549050806008838154811061345c5761345b614463565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806134ab576134aa615dbf565b5b6001900381819060005260206000200160009055905550505050565b60006134d283610b25565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6040518060600160405280600390602082028036833780820191505090505090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6135b18161357c565b81146135bc57600080fd5b50565b6000813590506135ce816135a8565b92915050565b6000602082840312156135ea576135e9613572565b5b60006135f8848285016135bf565b91505092915050565b60008115159050919050565b61361681613601565b82525050565b6000602082019050613631600083018461360d565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613671578082015181840152602081019050613656565b60008484015250505050565b6000601f19601f8301169050919050565b600061369982613637565b6136a38185613642565b93506136b3818560208601613653565b6136bc8161367d565b840191505092915050565b600060208201905081810360008301526136e1818461368e565b905092915050565b6000819050919050565b6136fc816136e9565b811461370757600080fd5b50565b600081359050613719816136f3565b92915050565b60006020828403121561373557613734613572565b5b60006137438482850161370a565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006137778261374c565b9050919050565b6137878161376c565b82525050565b60006020820190506137a2600083018461377e565b92915050565b6137b18161376c565b81146137bc57600080fd5b50565b6000813590506137ce816137a8565b92915050565b600080604083850312156137eb576137ea613572565b5b60006137f9858286016137bf565b925050602061380a8582860161370a565b9150509250929050565b61381d816136e9565b82525050565b60006020820190506138386000830184613814565b92915050565b60008060006060848603121561385757613856613572565b5b6000613865868287016137bf565b9350506020613876868287016137bf565b92505060406138878682870161370a565b9150509250925092565b6000819050919050565b60006138b66138b16138ac8461374c565b613891565b61374c565b9050919050565b60006138c88261389b565b9050919050565b60006138da826138bd565b9050919050565b6138ea816138cf565b82525050565b600060208201905061390560008301846138e1565b92915050565b6000613916826138bd565b9050919050565b6139268161390b565b82525050565b6000602082019050613941600083018461391d565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6139848261367d565b810181811067ffffffffffffffff821117156139a3576139a261394c565b5b80604052505050565b60006139b6613568565b90506139c2828261397b565b919050565b600067ffffffffffffffff8211156139e2576139e161394c565b5b602082029050919050565b600080fd5b6000613a05613a00846139c7565b6139ac565b90508060208402830185811115613a1f57613a1e6139ed565b5b835b81811015613a485780613a34888261370a565b845260208401935050602081019050613a21565b5050509392505050565b600082601f830112613a6757613a66613947565b5b6006613a748482856139f2565b91505092915050565b600060c08284031215613a9357613a92613572565b5b6000613aa184828501613a52565b91505092915050565b600060039050919050565b600081905092915050565b6000819050919050565b613ad3816136e9565b82525050565b6000613ae58383613aca565b60208301905092915050565b6000602082019050919050565b613b0781613aaa565b613b118184613ab5565b9250613b1c82613ac0565b8060005b83811015613b4d578151613b348782613ad9565b9650613b3f83613af1565b925050600181019050613b20565b505050505050565b6000606082019050613b6a6000830184613afe565b92915050565b600060208284031215613b8657613b85613572565b5b6000613b94848285016137bf565b91505092915050565b6000613ba8826138bd565b9050919050565b613bb881613b9d565b82525050565b6000602082019050613bd36000830184613baf565b92915050565b613be281613601565b8114613bed57600080fd5b50565b600081359050613bff81613bd9565b92915050565b60008060408385031215613c1c57613c1b613572565b5b6000613c2a858286016137bf565b9250506020613c3b85828601613bf0565b9150509250929050565b600067ffffffffffffffff821115613c6057613c5f61394c565b5b602082029050919050565b6000613c7e613c7984613c45565b6139ac565b90508060208402830185811115613c9857613c976139ed565b5b835b81811015613cc15780613cad888261370a565b845260208401935050602081019050613c9a565b5050509392505050565b600082601f830112613ce057613cdf613947565b5b6002613ced848285613c6b565b91505092915050565b600067ffffffffffffffff821115613d1157613d1061394c565b5b602082029050919050565b6000613d2f613d2a84613cf6565b6139ac565b90508060408402830185811115613d4957613d486139ed565b5b835b81811015613d725780613d5e8882613ccb565b845260208401935050604081019050613d4b565b5050509392505050565b600082601f830112613d9157613d90613947565b5b6002613d9e848285613d1c565b91505092915050565b6000806000806101c08587031215613dc257613dc1613572565b5b6000613dd087828801613ccb565b9450506040613de187828801613d7c565b93505060c0613df287828801613ccb565b925050610100613e0487828801613a52565b91505092959194509250565b60006080820190508181036000830152613e2a818761368e565b9050613e396020830186613814565b613e466040830185613814565b613e536060830184613814565b95945050505050565b600080fd5b600067ffffffffffffffff821115613e7c57613e7b61394c565b5b613e858261367d565b9050602081019050919050565b82818337600083830152505050565b6000613eb4613eaf84613e61565b6139ac565b905082815260208101848484011115613ed057613ecf613e5c565b5b613edb848285613e92565b509392505050565b600082601f830112613ef857613ef7613947565b5b8135613f08848260208601613ea1565b91505092915050565b60008060008060808587031215613f2b57613f2a613572565b5b6000613f39878288016137bf565b9450506020613f4a878288016137bf565b9350506040613f5b8782880161370a565b925050606085013567ffffffffffffffff811115613f7c57613f7b613577565b5b613f8887828801613ee3565b91505092959194509250565b600067ffffffffffffffff821115613faf57613fae61394c565b5b602082029050919050565b6000613fcd613fc884613f94565b6139ac565b90508060208402830185811115613fe757613fe66139ed565b5b835b818110156140105780613ffc888261370a565b845260208401935050602081019050613fe9565b5050509392505050565b600082601f83011261402f5761402e613947565b5b600361403c848285613fba565b91505092915050565b60006060828403121561405b5761405a613572565b5b60006140698482850161401a565b91505092915050565b600081519050919050565b600082825260208201905092915050565b600061409982614072565b6140a3818561407d565b93506140b3818560208601613653565b6140bc8161367d565b840191505092915050565b600060208201905081810360008301526140e1818461408e565b905092915050565b60008060408385031215614100576140ff613572565b5b600061410e858286016137bf565b925050602061411f858286016137bf565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061417057607f821691505b60208210810361418357614182614129565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006141e5602183613642565b91506141f082614189565b604082019050919050565b60006020820190508181036000830152614214816141d8565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b6000614277603d83613642565b91506142828261421b565b604082019050919050565b600060208201905081810360008301526142a68161426a565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b6000614309602d83613642565b9150614314826142ad565b604082019050919050565b60006020820190508181036000830152614338816142fc565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b600061439b602b83613642565b91506143a68261433f565b604082019050919050565b600060208201905081810360008301526143ca8161438e565b9050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b600061442d602c83613642565b9150614438826143d1565b604082019050919050565b6000602082019050818103600083015261445c81614420565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006144cc826136e9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036144fe576144fd614492565b5b600182019050919050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b600061453f601883613642565b915061454a82614509565b602082019050919050565b6000602082019050818103600083015261456e81614532565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b60006145d1602983613642565b91506145dc82614575565b604082019050919050565b60006020820190508181036000830152614600816145c4565b9050919050565b600060029050919050565b600081905092915050565b6000819050919050565b6000602082019050919050565b61463d81614607565b6146478184614612565b92506146528261461d565b8060005b8381101561468357815161466a8782613ad9565b965061467583614627565b925050600181019050614656565b505050505050565b600060029050919050565b600081905092915050565b6000819050919050565b600081905092915050565b6146bf81614607565b6146c981846146ab565b92506146d48261461d565b8060005b838110156147055781516146ec8782613ad9565b96506146f783614627565b9250506001810190506146d8565b505050505050565b600061471983836146b6565b60408301905092915050565b6000602082019050919050565b61473b8161468b565b6147458184614696565b9250614750826146a1565b8060005b83811015614781578151614768878261470d565b965061477383614725565b925050600181019050614754565b505050505050565b600060069050919050565b600081905092915050565b6000819050919050565b6000602082019050919050565b6147bf81614789565b6147c98184614794565b92506147d48261479f565b8060005b838110156148055781516147ec8782613ad9565b96506147f7836147a9565b9250506001810190506147d8565b505050505050565b60006101c0820190506148236000830187614634565b6148306040830186614732565b61483d60c0830185614634565b61484b6101008301846147b6565b95945050505050565b60008151905061486381613bd9565b92915050565b60006020828403121561487f5761487e613572565b5b600061488d84828501614854565b91505092915050565b7f496e76616c69642050726f6f6600000000000000000000000000000000000000600082015250565b60006148cc600d83613642565b91506148d782614896565b602082019050919050565b600060208201905081810360008301526148fb816148bf565b9050919050565b7f5369676e617475726520616c7265616479206e756c6c69666965640000000000600082015250565b6000614938601b83613642565b915061494382614902565b602082019050919050565b600060208201905081810360008301526149678161492b565b9050919050565b6000819050919050565b6149818161496e565b82525050565b600060208201905061499c6000830184614978565b92915050565b7f496e76616c6964206d65726b6c6520726f6f7400000000000000000000000000600082015250565b60006149d8601383613642565b91506149e3826149a2565b602082019050919050565b60006020820190508181036000830152614a07816149cb565b9050919050565b6000614a19826136e9565b9150614a24836136e9565b9250828203905081811115614a3c57614a3b614492565b5b92915050565b6000614a4d826136e9565b9150614a58836136e9565b9250828201905080821115614a7057614a6f614492565b5b92915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302614ad87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614a9b565b614ae28683614a9b565b95508019841693508086168417925050509392505050565b6000614b15614b10614b0b846136e9565b613891565b6136e9565b9050919050565b6000819050919050565b614b2f83614afa565b614b43614b3b82614b1c565b848454614aa8565b825550505050565b600090565b614b58614b4b565b614b63818484614b26565b505050565b5b81811015614b8757614b7c600082614b50565b600181019050614b69565b5050565b601f821115614bcc57614b9d81614a76565b614ba684614a8b565b81016020851015614bb5578190505b614bc9614bc185614a8b565b830182614b68565b50505b505050565b600082821c905092915050565b6000614bef60001984600802614bd1565b1980831691505092915050565b6000614c088383614bde565b9150826002028217905092915050565b614c2182613637565b67ffffffffffffffff811115614c3a57614c3961394c565b5b614c448254614158565b614c4f828285614b8b565b600060209050601f831160018114614c825760008415614c70578287015190505b614c7a8582614bfc565b865550614ce2565b601f198416614c9086614a76565b60005b82811015614cb857848901518255600182019150602085019450602081019050614c93565b86831015614cd55784890151614cd1601f891682614bde565b8355505b6001600288020188555050505b505050505050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614d46602f83613642565b9150614d5182614cea565b604082019050919050565b60006020820190508181036000830152614d7581614d39565b9050919050565b600067ffffffffffffffff821115614d9757614d9661394c565b5b614da08261367d565b9050602081019050919050565b6000614dc0614dbb84614d7c565b6139ac565b905082815260208101848484011115614ddc57614ddb613e5c565b5b614de7848285613653565b509392505050565b600082601f830112614e0457614e03613947565b5b8151614e14848260208601614dad565b91505092915050565b60008060408385031215614e3457614e33613572565b5b600083015167ffffffffffffffff811115614e5257614e51613577565b5b614e5e85828601614def565b925050602083015167ffffffffffffffff811115614e7f57614e7e613577565b5b614e8b85828601614def565b9150509250929050565b600060208284031215614eab57614eaa613572565b5b600082015167ffffffffffffffff811115614ec957614ec8613577565b5b614ed584828501614def565b91505092915050565b600081905092915050565b7f7b202261747472696275746573223a205b000000000000000000000000000000600082015250565b6000614f1f601183614ede565b9150614f2a82614ee9565b601182019050919050565b7f7b2274726169745f74797065223a202249737375696e67205374617465222c2060008201527f2276616c7565223a202200000000000000000000000000000000000000000000602082015250565b6000614f91602a83614ede565b9150614f9c82614f35565b602a82019050919050565b6000614fb282613637565b614fbc8185614ede565b9350614fcc818560208601613653565b80840191505092915050565b7f227d2c7b2274726169745f74797065223a202246697273744e616d65222c202260008201527f76616c7565223a20220000000000000000000000000000000000000000000000602082015250565b6000615034602983614ede565b915061503f82614fd8565b602982019050919050565b7f227d2c7b2274726169745f74797065223a20224c6173744e616d65222c20227660008201527f616c7565223a2022000000000000000000000000000000000000000000000000602082015250565b60006150a6602883614ede565b91506150b18261504a565b602882019050919050565b7f227d2c7b2274726169745f74797065223a202250617373706f7274204e756d6260008201527f6572222c202276616c7565223a20220000000000000000000000000000000000602082015250565b6000615118602f83614ede565b9150615123826150bc565b602f82019050919050565b7f227d2c7b2274726169745f74797065223a20224e6174696f6e616c697479222c60008201527f202276616c7565223a2022000000000000000000000000000000000000000000602082015250565b600061518a602b83614ede565b91506151958261512e565b602b82019050919050565b7f227d2c7b2274726169745f74797065223a202244617465206f6620626972746860008201527f222c202276616c7565223a202200000000000000000000000000000000000000602082015250565b60006151fc602d83614ede565b9150615207826151a0565b602d82019050919050565b7f227d2c7b2274726169745f74797065223a202247656e646572222c202276616c60008201527f7565223a20220000000000000000000000000000000000000000000000000000602082015250565b600061526e602683614ede565b915061527982615212565b602682019050919050565b7f227d2c7b2274726169745f74797065223a20224578706972792064617465222c60008201527f202276616c7565223a2022000000000000000000000000000000000000000000602082015250565b60006152e0602b83614ede565b91506152eb82615284565b602b82019050919050565b7f227d2c7b2274726169745f74797065223a202245787069726564222c2022766160008201527f6c7565223a202200000000000000000000000000000000000000000000000000602082015250565b6000615352602783614ede565b915061535d826152f6565b602782019050919050565b7f227d000000000000000000000000000000000000000000000000000000000000600082015250565b600061539e600283614ede565b91506153a982615368565b600282019050919050565b7f5d2c000000000000000000000000000000000000000000000000000000000000600082015250565b60006153ea600283614ede565b91506153f5826153b4565b600282019050919050565b7f226465736372697074696f6e223a202250726f6f66206f662050617373706f7260008201527f742067756172616e7465657320706f7373657373696f6e206f6620612076616c60208201527f69642070617373706f72742e222c2265787465726e616c5f75726c223a20226860408201527f747470733a2f2f6769746875622e636f6d2f7a6b2d70617373706f72742f707260608201527f6f6f662d6f662d70617373706f7274222c22696d616765223a2022687474707360808201527f3a2f2f692e696d6775722e636f6d2f396b766574696a2e706e67222c226e616d60a08201527f65223a202250726f6f66206f662050617373706f72742023000000000000000060c082015250565b600061551a60d883614ede565b915061552582615400565b60d882019050919050565b600061553b82614f12565b915061554682614f84565b9150615552828d614fa7565b915061555d82615027565b9150615569828c614fa7565b915061557482615099565b9150615580828b614fa7565b915061558b8261510b565b9150615597828a614fa7565b91506155a28261517d565b91506155ae8289614fa7565b91506155b9826151ef565b91506155c58288614fa7565b91506155d082615261565b91506155dc8287614fa7565b91506155e7826152d3565b91506155f38286614fa7565b91506155fe82615345565b915061560a8285614fa7565b915061561582615391565b9150615620826153dd565b915061562b8261550d565b91506156378284614fa7565b915061564282615391565b91508190509b9a5050505050505050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b600061568c601d83614ede565b915061569782615656565b601d82019050919050565b60006156ad8261567f565b91506156b98284614fa7565b915081905092915050565b6000815190506156d3816136f3565b92915050565b6000602082840312156156ef576156ee613572565b5b60006156fd848285016156c4565b91505092915050565b600060ff82169050919050565b600061571e82615706565b915060ff820361573157615730614492565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615798602683613642565b91506157a38261573c565b604082019050919050565b600060208201905081810360008301526157c78161578b565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b600061582a602583613642565b9150615835826157ce565b604082019050919050565b600060208201905081810360008301526158598161581d565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006158bc602483613642565b91506158c782615860565b604082019050919050565b600060208201905081810360008301526158eb816158af565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000615928602083613642565b9150615933826158f2565b602082019050919050565b600060208201905081810360008301526159578161591b565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000615994601983613642565b915061599f8261595e565b602082019050919050565b600060208201905081810360008301526159c381615987565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000615a00602083613642565b9150615a0b826159ca565b602082019050919050565b60006020820190508181036000830152615a2f816159f3565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000615a6c601c83613642565b9150615a7782615a36565b602082019050919050565b60006020820190508181036000830152615a9b81615a5f565b9050919050565b60006040820190508181036000830152615abc818561368e565b90508181036020830152615ad0818461368e565b90509392505050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000615b35603283613642565b9150615b4082615ad9565b604082019050919050565b60006020820190508181036000830152615b6481615b28565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615ba5826136e9565b9150615bb0836136e9565b925082615bc057615bbf615b6b565b5b828204905092915050565b6000615bd6826136e9565b9150615be1836136e9565b9250828202615bef816136e9565b91508282048414831517615c0657615c05614492565b5b5092915050565b7f43616e6e6f74207472616e73666572202d2050726f6f66206f6620506173737060008201527f6f727420697320736f756c626f756e6400000000000000000000000000000000602082015250565b6000615c69603083613642565b9150615c7482615c0d565b604082019050919050565b60006020820190508181036000830152615c9881615c5c565b9050919050565b6000608082019050615cb4600083018761377e565b615cc1602083018661377e565b615cce6040830185613814565b8181036060830152615ce0818461408e565b905095945050505050565b600081519050615cfa816135a8565b92915050565b600060208284031215615d1657615d15613572565b5b6000615d2484828501615ceb565b91505092915050565b7f455243373231456e756d657261626c653a20636f6e736563757469766520747260008201527f616e7366657273206e6f7420737570706f727465640000000000000000000000602082015250565b6000615d89603583613642565b9150615d9482615d2d565b604082019050919050565b60006020820190508181036000830152615db881615d7c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa264697066735822122046d27b34599feaff8b765cb2832c4856d7912bd8b4fd348a5d476c60456ad99664736f6c63430008120033",
"linkReferences": {},
"deployedLinkReferences": {}
}