fluid-contracts-public/deployments/mainnet/dump/0xF74cb9D69ada3559903149CFD60fD57cEAF95F30.json
2024-07-11 13:05:09 +00:00

663 lines
111 KiB
JSON

{
"address": "0xF74cb9D69ada3559903149CFD60fD57cEAF95F30",
"abi": [
{
"inputs": [
{
"components": [
{
"internalType": "address",
"name": "liquidity",
"type": "address"
},
{
"internalType": "address",
"name": "factory",
"type": "address"
},
{
"internalType": "address",
"name": "adminImplementation",
"type": "address"
},
{
"internalType": "address",
"name": "secondaryImplementation",
"type": "address"
},
{
"internalType": "address",
"name": "supplyToken",
"type": "address"
},
{
"internalType": "address",
"name": "borrowToken",
"type": "address"
},
{
"internalType": "uint8",
"name": "supplyDecimals",
"type": "uint8"
},
{
"internalType": "uint8",
"name": "borrowDecimals",
"type": "uint8"
},
{
"internalType": "uint256",
"name": "vaultId",
"type": "uint256"
},
{
"internalType": "bytes32",
"name": "liquiditySupplyExchangePriceSlot",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "liquidityBorrowExchangePriceSlot",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "liquidityUserSupplySlot",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "liquidityUserBorrowSlot",
"type": "bytes32"
}
],
"internalType": "struct Structs.ConstantViews",
"name": "constants_",
"type": "tuple"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "colLiquidated",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "debtLiquidated",
"type": "uint256"
}
],
"name": "FluidLiquidateResult",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "errorId_",
"type": "uint256"
}
],
"name": "FluidLiquidityCalcsError",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "errorId_",
"type": "uint256"
}
],
"name": "FluidSafeTransferError",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "errorId_",
"type": "uint256"
}
],
"name": "FluidVaultError",
"type": "error"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "colAbsorbedRaw_",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "debtAbsorbedRaw_",
"type": "uint256"
}
],
"name": "LogAbsorb",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "liquidator_",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "colAmt_",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "debtAmt_",
"type": "uint256"
},
{
"indexed": false,
"internalType": "address",
"name": "to_",
"type": "address"
}
],
"name": "LogLiquidate",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "user_",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "nftId_",
"type": "uint256"
},
{
"indexed": false,
"internalType": "int256",
"name": "colAmt_",
"type": "int256"
},
{
"indexed": false,
"internalType": "int256",
"name": "debtAmt_",
"type": "int256"
},
{
"indexed": false,
"internalType": "address",
"name": "to_",
"type": "address"
}
],
"name": "LogOperate",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "int256",
"name": "colAmt_",
"type": "int256"
},
{
"indexed": false,
"internalType": "int256",
"name": "debtAmt_",
"type": "int256"
}
],
"name": "LogRebalance",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "supplyExPrice_",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "borrowExPrice_",
"type": "uint256"
}
],
"name": "LogUpdateExchangePrice",
"type": "event"
},
{
"stateMutability": "nonpayable",
"type": "fallback"
},
{
"inputs": [],
"name": "LIQUIDITY",
"outputs": [
{
"internalType": "contract IFluidLiquidity",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "VAULT_FACTORY",
"outputs": [
{
"internalType": "contract IFluidVaultFactory",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "VAULT_ID",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "constantsView",
"outputs": [
{
"components": [
{
"internalType": "address",
"name": "liquidity",
"type": "address"
},
{
"internalType": "address",
"name": "factory",
"type": "address"
},
{
"internalType": "address",
"name": "adminImplementation",
"type": "address"
},
{
"internalType": "address",
"name": "secondaryImplementation",
"type": "address"
},
{
"internalType": "address",
"name": "supplyToken",
"type": "address"
},
{
"internalType": "address",
"name": "borrowToken",
"type": "address"
},
{
"internalType": "uint8",
"name": "supplyDecimals",
"type": "uint8"
},
{
"internalType": "uint8",
"name": "borrowDecimals",
"type": "uint8"
},
{
"internalType": "uint256",
"name": "vaultId",
"type": "uint256"
},
{
"internalType": "bytes32",
"name": "liquiditySupplyExchangePriceSlot",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "liquidityBorrowExchangePriceSlot",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "liquidityUserSupplySlot",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "liquidityUserBorrowSlot",
"type": "bytes32"
}
],
"internalType": "struct Structs.ConstantViews",
"name": "constantsView_",
"type": "tuple"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "int256",
"name": "positionTick_",
"type": "int256"
},
{
"internalType": "uint256",
"name": "positionTickId_",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "positionRawDebt_",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "tickData_",
"type": "uint256"
}
],
"name": "fetchLatestPosition",
"outputs": [
{
"internalType": "int256",
"name": "",
"type": "int256"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "positionRawCol_",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "branchId_",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "branchData_",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "debtAmt_",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "colPerUnitDebt_",
"type": "uint256"
},
{
"internalType": "address",
"name": "to_",
"type": "address"
},
{
"internalType": "bool",
"name": "absorb_",
"type": "bool"
}
],
"name": "liquidate",
"outputs": [
{
"internalType": "uint256",
"name": "actualDebtAmt_",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "actualColAmt_",
"type": "uint256"
}
],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "token_",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount_",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "data_",
"type": "bytes"
}
],
"name": "liquidityCallback",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "nftId_",
"type": "uint256"
},
{
"internalType": "int256",
"name": "newCol_",
"type": "int256"
},
{
"internalType": "int256",
"name": "newDebt_",
"type": "int256"
},
{
"internalType": "address",
"name": "to_",
"type": "address"
}
],
"name": "operate",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "int256",
"name": "",
"type": "int256"
},
{
"internalType": "int256",
"name": "",
"type": "int256"
}
],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "slot_",
"type": "bytes32"
}
],
"name": "readFromStorage",
"outputs": [
{
"internalType": "uint256",
"name": "result_",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "rebalance",
"outputs": [
{
"internalType": "int256",
"name": "supplyAmt_",
"type": "int256"
},
{
"internalType": "int256",
"name": "borrowAmt_",
"type": "int256"
}
],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "vaultVariables2_",
"type": "uint256"
}
],
"name": "updateExchangePrices",
"outputs": [
{
"internalType": "uint256",
"name": "liqSupplyExPrice_",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "liqBorrowExPrice_",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "vaultSupplyExPrice_",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "vaultBorrowExPrice_",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "updateExchangePricesOnStorage",
"outputs": [
{
"internalType": "uint256",
"name": "liqSupplyExPrice_",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "liqBorrowExPrice_",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "vaultSupplyExPrice_",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "vaultBorrowExPrice_",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
}
],
"transactionHash": "0X38C3CF08FF1481365BD21391C52DB35D13B9774EC2512F83092919B593968221",
"args": [
{
"liquidity": "0x52Aa899454998Be5b000Ad077a46Bbe360F4e497",
"factory": "0x324c5Dc1fC42c7a4D43d92df1eBA58a54d13Bf2d",
"adminImplementation": "0x5dDf07980ADD152D518AE463269e1A97e93EE1a9",
"secondaryImplementation": "0xbd6C8ee7CB9a13333e043C4d5fCf3ac125f7f890",
"supplyToken": "0xcd5fe23c85820f7b72d0926fc9b05b43e359b7ee",
"borrowToken": "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599",
"supplyDecimals": 18,
"borrowDecimals": 8,
"vaultId": 26,
"liquidityTotalSupplySlot": "0x4fd0bc2c686ba4378c79aedfc3a5b8082c3d0a08bc881aa72df655d3853a251b",
"liquidityTotalBorrowSlot": "0x3f9b8dcb97128ce409f77600de29c63fea2c77a8987811b1205b1130b823c51f",
"liquiditySupplyExchangePriceSlot": "0xd4cf6f2f51dbaea40476315a1484b80d6fd1a75ae966e074cc2e1bbb21e1cd19",
"liquidityBorrowExchangePriceSlot": "0x2f97bae778107453c9fa4e71a644cd0a05ed4723a03b3b8af2d1b088c870a29b",
"liquidityUserSupplySlot": "0xc78a30a6677ff9ca7a567b130e388d7315a3c305f8952e3a1ba91b7766ca0e11",
"liquidityUserBorrowSlot": "0x59aff716640183f4ffe027be73ddfbab6aaee5ce7e7cdec5f8e76ba9b47016c9"
}
],
"numDeployments": 1,
"bytecode": "0x6102206040523480156200001257600080fd5b506040516200621f3803806200621f8339810160408190526200003591620002a6565b80516001600160a01b0390811661014081815260208401518316610160908152610100808601516101809081526080808801518716905260a0808801518716905260c08088015160ff90811690915260e0808901519091169052610120808801516101a0819052948801516101c052928701516101e052860151610200526040808701518616909152606086015190941690526000805466100000004000001781559251632d71cdb960e21b815260048101919091526001600160401b0391605b9163b5c736e490602401602060405180830381865afa1580156200011e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000144919062000396565b901c16905060006001600160401b03609b610140516001600160a01b031663b5c736e46101c0516040518263ffffffff1660e01b81526004016200018a91815260200190565b602060405180830381865afa158015620001a8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ce919062000396565b901c16905064e8d4a51000821080620001eb575064e8d4a5100081105b1562000212576040516330090e6560e11b8152617924600482015260240160405180910390fd5b60401b177ce8d4a51000000000e8d4a51000000000000000000000000000000000001760085550620003b0565b6040516101a081016001600160401b03811182821017156200027157634e487b7160e01b600052604160045260246000fd5b60405290565b80516001600160a01b03811681146200028f57600080fd5b919050565b805160ff811681146200028f57600080fd5b60006101a08284031215620002ba57600080fd5b620002c46200023f565b620002cf8362000277565b8152620002df6020840162000277565b6020820152620002f26040840162000277565b6040820152620003056060840162000277565b6060820152620003186080840162000277565b60808201526200032b60a0840162000277565b60a08201526200033e60c0840162000294565b60c08201526200035160e0840162000294565b60e08201526101008381015190820152610120808401519082015261014080840151908201526101608084015190820152610180928301519281019290925250919050565b600060208284031215620003a957600080fd5b5051919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e05161020051615ccf6200055060003960006106f30152600081816106cc0152611c2b0152600081816106a501526124dd01526000818161067e01526123fb01526000818161044d015281816106570152610bff015260008181610102015281816101bc015281816103780152818161054001528181610c2b0152610d1b0152600081816104190152818161051b01528181611c5101528181611d7b01528181611fb8015281816120d7015281816121bc015281816124430152818161250a01528181613f260152818161404301528181614250015261430001526000818161058f015281816129300152612e0d015260008181610280015261056801526000610630015260006106080152600081816105df01528181610a2701528181611f1a01528181611ff5015281816121fa01528181612a1601528181613ec90152613f630152600081816105b70152818161098101528181611de201528181611e2701528181612115015261406a0152615ccf6000f3fe6080604052600436106100c75760003560e01c8063540acabc11610074578063ad2075011161004e578063ad207501146104ad578063b5c736e4146104cd578063b7791bf2146104ec576100c7565b8063540acabc1461043b5780637d7c2a1c1461047d5780638433ea221461049a576100c7565b8063103f2907116100a5578063103f29071461036657806322348cc7146103bf5780632861c7d114610407576100c7565b806302161887146102de578063032d22761461031857806309f0d8cb14610346575b3480156100d357600080fd5b506040517f4502d0630000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634502d06390602401602060405180830381865afa15801561015e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061018291906156a1565b8061023c57506040517fe04c8e5d0000000000000000000000000000000000000000000000000000000081523060048201523360248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e04c8e5d90604401602060405180830381865afa158015610218573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061023c91906156a1565b61027b576040517f60121cca00000000000000000000000000000000000000000000000000000000815261792560048201526024015b60405180910390fd5b6102dc7f00000000000000000000000000000000000000000000000000000000000000006000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061072492505050565b005b3480156102ea57600080fd5b506102f3610770565b6040805194855260208501939093529183015260608201526080015b60405180910390f35b61032b6103263660046156e0565b610864565b6040805193845260208401929092529082015260600161030f565b34801561035257600080fd5b506102f3610361366004615721565b6123d0565b34801561037257600080fd5b5061039a7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161030f565b3480156103cb57600080fd5b506103df6103da36600461573a565b612668565b604080519586526020860194909452928401919091526060830152608082015260a00161030f565b34801561041357600080fd5b5061039a7f000000000000000000000000000000000000000000000000000000000000000081565b34801561044757600080fd5b5061046f7f000000000000000000000000000000000000000000000000000000000000000081565b60405190815260200161030f565b610485612928565b6040805192835260208301919091520161030f565b6104856104a836600461576c565b6129a8565b3480156104b957600080fd5b506102dc6104c83660046157ab565b614238565b3480156104d957600080fd5b5061046f6104e8366004615721565b5490565b3480156104f857600080fd5b50604080516101a08101825273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811682527f0000000000000000000000000000000000000000000000000000000000000000811660208301527f00000000000000000000000000000000000000000000000000000000000000008116828401527f0000000000000000000000000000000000000000000000000000000000000000811660608301527f0000000000000000000000000000000000000000000000000000000000000000811660808301527f00000000000000000000000000000000000000000000000000000000000000001660a082015260ff7f0000000000000000000000000000000000000000000000000000000000000000811660c08301527f00000000000000000000000000000000000000000000000000000000000000001660e08201527f00000000000000000000000000000000000000000000000000000000000000006101008201527f00000000000000000000000000000000000000000000000000000000000000006101208201527f00000000000000000000000000000000000000000000000000000000000000006101408201527f00000000000000000000000000000000000000000000000000000000000000006101608201527f0000000000000000000000000000000000000000000000000000000000000000610180820152905161030f9190615834565b6060600080835160208501865af43d6040519250601f19601f6020830101168301604052808352806000602085013e81156001810361076757816000803e816000fd5b50505092915050565b6000806000806107816001546123d0565b9296509094509250905067ffffffffffffffff8411806107a8575067ffffffffffffffff83115b806107ba575067ffffffffffffffff82115b806107cc575067ffffffffffffffff81115b15610807576040517f60121cca00000000000000000000000000000000000000000000000000000000815261792d6004820152602401610272565b604083811b8517608084901b1760c083901b17600855517fcde545703e0372175cadfff811d67c32910c3dcb33199679b3271c4106afdf9a906108569084908490918252602082015260400190565b60405180910390a190919293565b600080548190819060018116820361088257600181176000556108b8565b6040517f60121cca0000000000000000000000000000000000000000000000000000000081526179196004820152602401610272565b861580156108c4575085155b806109045750861580159061090457507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd8f087138015610904575061271087125b806109445750851580159061094457507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd8f086138015610944575061271086125b1561097f576040517f60121cca00000000000000000000000000000000000000000000000000000000815261791a6004820152602401610272565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1480156109d85750600087135b15610a1f57348714610a1a576040517f60121cca00000000000000000000000000000000000000000000000000000000815261791b6004820152602401610272565b610ab8565b3415610ab8577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee148015610a7e5750600086125b610ab8576040517f60121cca00000000000000000000000000000000000000000000000000000000815261791b6004820152602401610272565b610b38604051806102000160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600154610100820152600282901c620fffff166000808215610b805782600116600114610b71576207ffff600184901c16600003610ba2565b6207ffff600184901c16610ba2565b7f80000000000000000000000000000000000000000000000000000000000000005b61014085015260008c9003610cd4577f800000000000000000000000000000000000000000000000000000000000000060c08501526040517f94bf804d0000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201523360248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906394bf804d906044016020604051808303816000875af1158015610c89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cad9190615983565b9b50847a040000000000000000000000000000000000000000000000000000019450610ef3565b60008b1280610ce3575060008a135b8015610db457506040517f6352211e000000000000000000000000000000000000000000000000000000008152600481018d905233907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636352211e90602401602060405180830381865afa158015610d77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9b919061599c565b73ffffffffffffffffffffffffffffffffffffffff1614155b15610def576040517f60121cca00000000000000000000000000000000000000000000000000000000815261791c6004820152602401610272565b60008c8152600360205260408120549350839003610e3d576040517f60121cca0000000000000000000000000000000000000000000000000000000081526179236004820152602401610272565b66ffffffffffffff603584901c811660ff602d86901c81169190911b6060870152607585901c909116606d85901c9182161b60a086015267ffffffffffffffff16915060018084169003610eb6577f800000000000000000000000000000000000000000000000000000000000000060c0850152610ef3565b82600216600214610ed3576207ffff600284901c16600003610ede565b6207ffff600284901c165b60c0850152601583901c62ffffff1660e08501525b7f80000000000000000000000000000000000000000000000000000000000000008460c0015113156111e157602d9290921c60ff16918215610f3e5760608401516001841b01610f47565b83606001516001015b9250606083610f5c8660c0015160020b61432b565b610f6691906159e8565b610f72911c60016159ff565b608085015260c0840151600090815260056020526040902054925060018084161480610faa57508360e0015162ffffff600185901c16115b156110d257610fc78460c001518560e00151866080015186612668565b6101c089015260608801919091526080870182905260c087019290925260a0860151919350111561109b5767ffffffffffffffff6034856101c00151901c16925060ff8316600884901c901b92508360800151836110259190615a12565b9250606483101561103557606492505b60346110468460386008600161458d565b6101c086015160008581526007602052604090207ffffffffffffffffffffffffffffffffffff0000000000000000fffffffffffff9091169190921b17905560a08401516080850180519190910390526111d9565b83608001518460a00151600a546110b291906159ff565b6110bc9190615a12565b600a5560006080850181905260608501526111d9565b67ffffffffffffffff601984901c16915081600003611121576040517f60121cca00000000000000000000000000000000000000000000000000000000815261791d6004820152602401610272565b60ff8216600883901c901b915081846080015110611140576000611148565b836080015182035b915061271082101561118f57600091508361014001518460c001510361118057611177846101400151866146b6565b61014086015294505b61118f8460c001516000614898565b60196111a08360386008600061458d565b60c08601516000908152600560205260409020911b6301ffffff851617905560a08401516080850180516111d5908390615a12565b9052505b600060a08501525b60c08401516040850152606084015184526080840151602085015261010084015161120b906123d0565b6101a08801526101808701525061016085015260008b13156112b15761018084015161123c64e8d4a510008d6159e8565b6112469190615a54565b8460600181815161125791906159ff565b90525060608401516fffffffffffffffffffffffffffffffff10156112ac576040517f60121cca00000000000000000000000000000000000000000000000000000000815261792f6004820152602401610272565b611408565b60008b1215611408577fffffffffffffffffffffffffffffffff800000000000000000000000000000008b1315611364576101808401516001906112fa64e8d4a510008e615a68565b6113049190615ab4565b61130e9190615b1c565b90508360600151816000031115611355576040517f60121cca0000000000000000000000000000000000000000000000000000000081526179266004820152602401610272565b60608401805182019052611408565b7f80000000000000000000000000000000000000000000000000000000000000008b036113d25764e8d4a5100084610180015185606001516113a691906159e8565b6113b09190615a54565b6113b990615b43565b6113c4906001615b7b565b600060608601529a50611408565b6040517f60121cca00000000000000000000000000000000000000000000000000000000815261792f6004820152602401610272565b60008a13156114d8576101a084015161142664e8d4a510008c6159e8565b6114309190615a54565b61143b9060016159ff565b92506127106103ff6052866101000151901c168461145991906159e8565b6114639190615a54565b61146d90846159ff565b8460800181815161147e91906159ff565b90525060808401516fffffffffffffffffffffffffffffffff10156114d3576040517f60121cca00000000000000000000000000000000000000000000000000000000815261792f6004820152602401610272565b6115f8565b60008a12156115f8577fffffffffffffffffffffffffffffffff800000000000000000000000000000008a131561158d576101a084015161151e64e8d4a510008c615a68565b6115289190615ab4565b611533906001615b7b565b9050806000039050836080015181111561157d576040517f60121cca0000000000000000000000000000000000000000000000000000000081526179276004820152602401610272565b60808401805182900390526115f8565b7f80000000000000000000000000000000000000000000000000000000000000008a036113d257600164e8d4a51000856101a0015186608001516115d191906159e8565b6115db9190615a54565b6115e490615b43565b6115ee9190615b1c565b6000608086015299505b8a158015611604575089155b1561163f576040517f60121cca00000000000000000000000000000000000000000000000000000000815261791a6004820152602401610272565b6080840151156118b4576116778460600151633b9aca008660800151633b9aca01028161166e5761166e615a25565b0460010161490b565b60a0880152608087015260e086015260c085015260008a12156116e95783602001518460a0015185608001516116ad9190615a12565b11156116e9576040517f60121cca0000000000000000000000000000000000000000000000000000000081526179346004820152602401610272565b60008b1380156116f7575089155b1561179c578351602085015161171b906c01000000000000000000000000906159e8565b6117259190615a54565b84606001516c010000000000000000000000008660a00151876080015161174c9190615a12565b61175691906159e8565b6117609190615a54565b111561179c576040517f60121cca0000000000000000000000000000000000000000000000000000000081526179346004820152602401610272565b8361014001518460c00151126118af5760008460c00151126117c95760018460c00151901b6001176117d5565b60c084015160000360011b5b92508460021660000361181257600283901b857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00000161794506118db565b6001603486811c633fffffff16919091016000818152600760205260409020780fffffffc00000000000000000000000000000000000000000609089901b167afffff000000000000000000000000000000000000000000000000060c28a901b161790557ffffffffffffffffffffffffffffffffffffffffffffc00000000000000000000909616600285901b17601687901b179086901b179491505b6118db565b7f800000000000000000000000000000000000000000000000000000000000000060c08501525b60008b12806118ea575060008a135b15611b155773ffffffffffffffffffffffffffffffffffffffff891661190e573398505b6000846080015111801561195d57508360c00151846040015113158061195d5750633b9aca008460200151633b9aca01028161194c5761194c615a25565b046001018460a00151856080015103115b15611b15576060846101000151901c73ffffffffffffffffffffffffffffffffffffffff16638e7bfbc06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119da9190615983565b9250760a70c3c40a64e6c51999090b65f67d9240000000000000831180611a045750633b9aca0083105b15611a3f576040517f60121cca0000000000000000000000000000000000000000000000000000000081526179396004820152602401610272565b836101a00151846101800151840281611a5a57611a5a615a25565b049250722cd76fe086b93ce2f768a00b22a00000000000831115611a8f57722cd76fe086b93ce2f768a00b22a0000000000092505b6101008401516103e89060201c6103ff1684020491506b033b2e3c9fd0803ce80000006c010000000000000000000000008302049150611ace82614ae8565b5080915050808460c001511315611b15576040517f60121cca00000000000000000000000000000000000000000000000000000000815261791e6004820152602401610272565b7f80000000000000000000000000000000000000000000000000000000000000008460c001511315611b715760008460c0015112611b5e5760018460c00151901b600117611b6a565b60c084015160000360011b5b9250611b76565b600092505b60a0840151606d90611b8d9060386008600061458d565b6060860151911b90602d90611ba79060386008600061458d565b60e0870151911b9060151b600186901b8615611bc4576000611bc7565b60015b60ff1617171717600360008e81526020019081526020016000208190555060008b1215611d7057610100840151603e1c6103ff1692508215611d70576040517fb5c736e40000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063b5c736e490602401602060405180830381865afa158015611cad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cd19190615983565b6101e0850181905266ffffffffffffff600982901c1660ff600183901c161b9250611cfc9083614efd565b9050600081138015611d35575083610160015164e8d4a510008c6000030281611d2757611d27615a25565b05816103e885810385020503125b15611d70576040517f60121cca0000000000000000000000000000000000000000000000000000000081526179286004820152602401610272565b60008b1315611eee577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad967e1573eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614611e23576000611e25565b345b7f00000000000000000000000000000000000000000000000000000000000000008e600080600033604051602001611e79919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b6040516020818303038152906040526040518863ffffffff1660e01b8152600401611ea996959493929190615bff565b604080518083038185885af1158015611ec6573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611eeb9190615c58565b50505b60008a12156120bc577fffffffffffffffffffffffff11111111111111111111111111111111111111127f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1601611fb15789600003925082341115611f7357611f6e33843403614f8f565b611fb6565b82341015611f6e576040517f60121cca00000000000000000000000000000000000000000000000000000000815261791b6004820152602401610272565b600092505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad967e15847f000000000000000000000000000000000000000000000000000000000000000060008e60008033604051602001612047919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b6040516020818303038152906040526040518863ffffffff1660e01b815260040161207796959493929190615bff565b604080518083038185885af1158015612094573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906120b99190615c58565b50505b60008b12156121a157604080516000808252602082019092527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169163ad967e15917f0000000000000000000000000000000000000000000000000000000000000000918f918e9082906040518763ffffffff1660e01b815260040161215c96959493929190615bff565b60408051808303816000875af115801561217a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061219e9190615c58565b50505b60008a131561228757604080516000808252602082019092527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169163ad967e15917f000000000000000000000000000000000000000000000000000000000000000091908e9082908f906040518763ffffffff1660e01b815260040161224296959493929190615bff565b60408051808303816000875af1158015612260573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122849190615c58565b50505b67ffffffffffffffff605286901c1692508360000151846060015160ff8516600886901c901b6122b791906159ff565b6122c19190615a12565b925067ffffffffffffffff609286901c16915083602001518460a0015185608001516122ed9190615a12565b61230090600885901c60ff86161b6159ff565b61230a9190615a12565b9150609261231d8360386008600161458d565b901b60526123308560386008600061458d565b901b7ffffffffffffc00000000000000000000000000000003ffffffffffffffffffff8716171760005560408051338152602081018e90529081018c9052606081018b905273ffffffffffffffffffffffffffffffffffffffff8a1660808201527ffef64760e30a41b9d5ba7dd65ff7236a61d89ed8b44c67a29e84db1a67513a1c9060a00160405180910390a150999a98995096979650505050505050565b6008546040517fb5c736e40000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201526000918291829182916124b49073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b5c736e4906024015b602060405180830381865afa15801561248b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124af9190615983565b614fde565b506040517fb5c736e40000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015290955061254e907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063b5c736e49060240161246e565b94505067ffffffffffffffff81811690604083901c168187108061257157508086105b156125ac576040517f60121cca0000000000000000000000000000000000000000000000000000000081526179326004820152602401610272565b61271061ffff8916670de0b6b3a7640000848a670de0b6b3a764000002816125d6576125d6615a25565b040302816125e6576125e6615a25565b04945061271061ffff60108a901c16670de0b6b3a76400008389670de0b6b3a7640000028161261757612617615a25565b0403028161262757612627615a25565b049350670de0b6b3a7640000608084901c67ffffffffffffffff1686820102049450670de0b6b3a764000060c084901c858201020493505050509193509193565b600080808080868180600189901c62ffffff168b90036126ae575050601a87901c633fffffff169250603887901c6603ffffffffffff166001601989901c811614612705565b60008c8152600660205260408120600360028e0181810660550292918491048152602081019190915260400160002054901c600181811c633fffffff169750601f82901c6603ffffffffffff169450908116149150505b60008581526007602052604090205493508015612748577f80000000000000000000000000000000000000000000000000000000000000009b5060009950612914565b836003166002036127b25761276a82607486901c6603ffffffffffff166151ec565b9150600161277a600f60236159ff565b6001901b6127889190615a12565b82146127b25760a69390931c633fffffff1660008181526007602052604090205490945092612748565b83600316600314806127de575060016127cd600f60236159ff565b6001901b6127db9190615a12565b82145b1561280f577f80000000000000000000000000000000000000000000000000000000000000009b5060009950612914565b6128278a607486901c6603ffffffffffff1684615284565b9950606483048a11156128445761271061270f8b02049950612849565b600099505b89156128f0578360041660041461286c576207ffff600385901c16600003612877565b6207ffff600385901c165b9b5060006128878d60020b61432b565b905061271f612710820204633fffffff601687901c81166128a88385615a12565b6128b291906159e8565b6128bc9190615a54565b6128c690826159ff565b6128dd6c010000000000000000000000008e6159e8565b6128e79190615a54565b97505050612914565b7f80000000000000000000000000000000000000000000000000000000000000009b505b8b8a97509750505050945094509450945094565b60008061298c7f00000000000000000000000000000000000000000000000000000000000000006000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061072492505050565b80602001905181019061299f9190615c58565b90939092509050565b6000806129dd6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b600080549060018216900361088257600181176000557fffffffffffffffffffffffff11111111111111111111111111111111111111127f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1601612ab857873414158015612a78575061dead73ffffffffffffffffffffffffffffffffffffffff871614155b15612ab3576040517f60121cca0000000000000000000000000000000000000000000000000000000081526179206004820152602401610272565b612af4565b3415612af4576040517f60121cca0000000000000000000000000000000000000000000000000000000081526179206004820152602401610272565b6001548252600281901c620fffff16600003612b40576040517f60121cca00000000000000000000000000000000000000000000000000000000815261791f6004820152602401610272565b8151612b4b906123d0565b90919250909150836060018460800182815250828152505050612bc86040518061018001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b612c016040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60008060608660000151901c73ffffffffffffffffffffffffffffffffffffffff1663f3190c896040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c7b9190615983565b9150760a70c3c40a64e6c51999090b65f67d9240000000000000821180612ca0575081155b15612cdb576040517f60121cca0000000000000000000000000000000000000000000000000000000081526179396004820152602401610272565b85608001518660600151830281612cf457612cf4615a25565b049150722cd76fe086b93ce2f768a00b22a00000000000821115612d2957722cd76fe086b93ce2f768a00b22a0000000000091505b81760a70c3c40a64e6c51999090b65f67d924000000000000081612d4f57612d4f615a25565b875191900491506127109060481c6103ff16810182020460608501526b033b2e3c9fd0803ce80000006c010000000000000000000000008302875191900492506103e890602a1c6103ff168302049050612da881614ae8565b50602087015285516103e89060341c6103ff168302049050612dc981614ae8565b506040870152600480861614612deb576207ffff600386901c16600003612df6565b6207ffff600386901c165b60c0850181905260408701511215612f2757612ec77f0000000000000000000000000000000000000000000000000000000000000000868860400151604051602401612e4c929190918252602082015260400190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f9e3e482100000000000000000000000000000000000000000000000000000000179052610724565b806020019051810190612eda9190615983565b945084600416600414612ef9576207ffff600386901c16600003612f04565b6207ffff600386901c165b60c085015260008c9003612f2757505050600091825550925082915061422f9050565b6127108c1080612f4657506fffffffffffffffffffffffffffffffff8c115b15612f81576040517f60121cca00000000000000000000000000000000000000000000000000000000815261792e6004820152602401610272565b6002851615612f91576002612f94565b60015b60ff1684610100018181525050612fe16040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60c08501518152601686901c633fffffff16808552600090815260076020908152604082205490860181905260741c6603ffffffffffff16606086018190529003613034576603ffffffffc00060608501525b602084015160c41c620fffff169250821561307b5782600116600114613066576207ffff600184901c16600003613071565b6207ffff600184901c165b60808501526130a2565b7f800000000000000000000000000000000000000000000000000000000000000060808501525b866080015164e8d4a510008e02816130bc576130bc615a25565b0480865266ffffffffffffff609a88901c1660ff609289901c161b92506130e7633b9aca0084615a54565b1115613123576040517f60121cca00000000000000000000000000000000000000000000000000000000815261792e6004820152602401610272565b89156131b65760025485516fffffffffffffffffffffffffffffffff8216945060809190911c925083111561319b578451839061316090846159e8565b61316a9190615a54565b60a0860181905261317b9083615a12565b855160808088018290526000885282901b940393841760025591506131b6565b6000600255845183900385526080850183905260a085018290525b86602001518560c001511315613d4557845115613d45576040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081018290528190680100000000000000009060008960c0015112613232576101008960c001518161322c5761322c615a25565b0561324f565b60016101008a60c001516001018161324c5761324c615a25565b05035b6040820152845161325f9061432b565b604086015261010089015160010361328a57604085015160e08a015260c08901516020820152613391565b61271f856040015161271002816132a3576132a3615a25565b046060860181905260408601510360808601819052602089015160161c633fffffff90811660c0880181905290910260608701519190040160e08a0152845160208c01516001011480156132fb57508460c001516001145b156133915773ffffffffffffffffffffffffffffffffffffffff8f1661dead0361335b576040517fcc36aa440000000000000000000000000000000000000000000000000000000081526000600482018190526024820152604401610272565b6040517f60121cca0000000000000000000000000000000000000000000000000000000081526179356004820152602401610272565b8861010001516001036134015760c0890180516000908152600560205260408082205460608c01518c5194518452919092206301fffffe8316601a9490941b9390931760389190911b1760011790915566ffffffffffffff602182901c1660ff601983901c161b97509550613424565b67ffffffffffffffff60348960200151901c16965060ff8716600888901c901b96505b868960200181815161343691906159ff565b90525060e08901516134556c01000000000000000000000000896159e8565b61345f9190615a54565b8960400181815161347091906159ff565b90525060c0890151602082015114801561348f57508861010001516001145b8061349c57506080810151155b156135cc5780608001516000036134c55760408082015160009081526004602052205460808201525b88610100015160010361351c57604081015160c08a015160009081036101009283020190910160608301819052608083018051821b90911c90819052900361351c5760408082015160009081526004602052908120555b60808101511561354a57600161353582608001516152c9565b604083015161010002010360208201526135cc565b8a602001518160400151610100021215613589577f800000000000000000000000000000000000000000000000000000000000000060208201526135cc565b604080820180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190819052600090815260046020522054608082015261351c565b806020015188608001511380156135ea57508a602001518860800151135b156136075760808801516101208a015260026101608a0152613643565b8a602001518160200151131561362f5760208101516101208a015260016101608a0152613643565b60208b01516101208a015260036101608a01525b61365489610120015160020b61432b565b60408601526101608901516002036136e85761271f8560400151612710028161367f5761367f615a25565b046060860181905260408087015191909103608087019081526020808b015160a61c633fffffff908116600090815260079092529290205460a08b0181905260161c821660c0880181905290510260608701519190040160a086018190526101408a0152613705565b604085015160a086018190526101408a0152633fffffff60c08601525b6c010000000000000000000000008961014001518a6060015161372891906159e8565b6137329190615a54565b613748906b033b2e3c9fd0803ce8000000615a12565b8960e001518a602001518b610140015161376291906159e8565b61376c9190615a54565b8a6020015161377b9190615a12565b613791906b033b2e3c9fd0803ce80000006159e8565b61379b9190615a54565b93506b033b2e3c9fd0803ce80000008960600151856137ba91906159e8565b6137c49190615a54565b9250838960200151036137df576137dc600185615a12565b93505b8851841015806137f457508861016001516003145b15613b5f576080810151604080830151600090815260046020522055885184106139d457885160608a01519094506b033b2e3c9fd0803ce80000009061383a90866159e8565b6138449190615a54565b92508289604001516138569190615a12565b6c01000000000000000000000000858b602001516138749190615a12565b61387e91906159e8565b6138889190615a54565b965061389387614ae8565b60608701528086526101208a01511380156138b55750633fffffff8560c00151145b156138cd5784516002018552600160c08601526139e7565b8451600101855261016089015160021480156138ee57506101208901518551145b6138f95760006138ff565b8460c001515b9550612710856060015161271f028161391a5761391a615a25565b046040860181905260608601519081900360808701819052908803633fffffff028161394857613948615a25565b0460c086018190521561397957633fffffff8560c00151101561396f578460c0015161397c565b633ffffffe61397c565b60015b60c0860152851580159061399457508460c001518610155b156139cf576040517f60121cca0000000000000000000000000000000000000000000000000000000081526179386004820152602401610272565b6139e7565b6101208901516001908101865260c08601525b60208901516139f68582615a12565b613a0090846159e8565b613a0a9190615a54565b91508389608001818151613a1e91906159ff565b905250602089018051859190613a35908390615a12565b90525060a089018051849190613a4c9083906159ff565b905250604089018051849190613a63908390615a12565b9052506060880151613a75908361537f565b6060890152602089015160641115613abd576040517f60121cca0000000000000000000000000000000000000000000000000000000081526179306004820152602401610272565b8451600013613ad3578451600190811b17613adc565b845160000360011b5b606089015160208b015191975060741b90603490613aff9060386008600161458d565b901b60168760c00151901b600289901b60a6808d60200151901c901b60011717171717600760008a6000015181526020019081526020016000208190555060168860000151901b600287901b6034808d901c901b60021717179950613d40565b885184900389526020890151613b758582615a12565b613b7f90846159e8565b613b899190615a54565b91508389608001818151613b9d91906159ff565b905250602089018051859190613bb4908390615a12565b90525060a089018051849190613bcb9083906159ff565b905250604089018051849190613be2908390615a12565b9052506060880151613bf4908361537f565b6060890152610160890151680100000000000000009250600203613d1957633fffffff60a68960200151901c1696508760a00151955060006603ffffffffffff607488901c1690506000613c558a606001518361542390919063ffffffff16565b6020808c0180518d516000908152600790935260409092207fffffffffffffffffffffffc00000000000000000000000000000000000000000909216607484901b17600217909155998b5298889052506060890181905260c487901c620fffff16978815613cef5788600116600114613cda576207ffff60018a901c16600003613ce5565b6207ffff60018a901c165b60808b0152613d16565b7f800000000000000000000000000000000000000000000000000000000000000060808b01525b50505b61012089015160c08a01526101608901516101008a015261014089015160e08a0152613391565b505050505b64e8d4a5100087608001518660800151613d5f91906159e8565b613d699190615a54565b985064e8d4a5100087606001518660a00151613d8591906159e8565b613d8f9190615a54565b97508c891115613db357613da3898e615a54565b613dad90896159e8565b97508c98505b88600003613df1576040517f60121cca0000000000000000000000000000000000000000000000000000000081526179356004820152602401610272565b8b89613e058a670de0b6b3a76400006159e8565b613e0f9190615a54565b1015613e4b576040517f60121cca0000000000000000000000000000000000000000000000000000000081526179216004820152602401610272565b73ffffffffffffffffffffffffffffffffffffffff8b1661dead03613ea6576040517fcc36aa4400000000000000000000000000000000000000000000000000000000815260048101899052602481018a9052604401610272565b7fffffffffffffffffffffffff11111111111111111111111111111111111111127f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1601613f1f5788925034891015613f1a57613f1a338a3403614f8f565b613f24565b600092505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad967e15847f000000000000000000000000000000000000000000000000000000000000000060008d60000360008033604051602001613fb8919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b6040516020818303038152906040526040518863ffffffff1660e01b8152600401613fe896959493929190615bff565b604080518083038185885af1158015614005573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061402a9190615c58565b505073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663ad967e157f000000000000000000000000000000000000000000000000000000000000000060008b8103908f81806040519080825280601f01601f1916602001820160405280156140bc576020820181803683370190505b506040518763ffffffff1660e01b81526004016140de96959493929190615bff565b60408051808303816000875af11580156140fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141209190615c58565b505067ffffffffffffffff605287901c1692508460a0015160ff8416600885901c901b61414d9190615a12565b925067ffffffffffffffff609287901c169150846080015160ff8316600884901c901b61417a9190615a12565b9150609261418d8360386008600161458d565b901b60526141a08560386008600061458d565b7ffffffffffffc00000000000000000000000000000003ffffffffffffffffffff8916911b171760005560408051338152602081018a90529081018a905273ffffffffffffffffffffffffffffffffffffffff8c1660608201527f80fd9cc6b1821f4a510e45ffce6852ea3404807b5d3d833ffa85664408afcb669060800160405180910390a1505050505050505b94509492505050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146142ab576040517f60121cca0000000000000000000000000000000000000000000000000000000081526179296004820152602401610272565b6000546001166000036142ee576040517f60121cca00000000000000000000000000000000000000000000000000000000815261792a6004820152602401610272565b614325846142fe83850185615c7c565b7f0000000000000000000000000000000000000000000000000000000000000000866154ce565b50505050565b600060ff82901d80831803617fff81111561434557600080fd5b700100000000000000000000000000000000600182161561437357506fff9dd7de423466c20352b1246ce4856f5b6002821615614392576fff3bd55f4488ad277531fa1c725a66d00260801c5b60048216156143b1576ffe78410fd6498b73cb96a6917f8532590260801c5b60088216156143d0576ffcf2d9987c9be178ad5bfeffaa1232730260801c5b60108216156143ef576ff9ef02c4529258b057769680fc6601b30260801c5b602082161561440e576ff402d288133a85a17784a411f7aba0820260801c5b604082161561442d576fe895615b5beb6386553757b0352bda900260801c5b608082161561444c576fd34f17a00ffa00a8309940a15930391a0260801c5b61010082161561446c576fae6b7961714e20548d88ea5123f9a0ff0260801c5b61020082161561448c576f76d6461f27082d74e0feed3b388c0ca10260801c5b6104008216156144ac576f372a3bfe0745d8b6b19d985d9a8b85bb0260801c5b6108008216156144cc576f0be32cbee48979763cf7247dd7bb539d0260801c5b6110008216156144eb576e8d4f70c9ff4924dac37612d1e2921e0260801c5b612000821615614509576d4e009ae5519380809a02ca7aec770260801c5b614000821615614525576b17c45e641b6e95dee056ff100260801c5b600091507f80000000000000000000000000000000000000000000000000000000000000008416614583577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0463ffffffff81161561458357600191505b60201c0192915050565b600080856fffffffffffffffffffffffffffffffff8111156145b05760809150811c5b67ffffffffffffffff8111156145c8576040918201911c5b63ffffffff8111156145dc576020918201911c5b61ffff8111156145ee576010918201911c5b60ff8111156145ff576008918201911c5b600f811115614610576004918201911c5b6003811115614621576002918201911c5b6001811115614631576001820191505b801561463e576001820191505b508481101561464a5750835b848103905085811c6000821184161561469957600181019050806001871b0361469957506001908101907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86011b5b6001851b82106146a857600080fd5b90931b909201949350505050565b601681901c633fffffff166000818152600760205260408120549091829182600160c483901c811690036146f4575060c581901c6207ffff1661472c565b5060c581901c6207ffff1660008190039061472c57507f80000000000000000000000000000000000000000000000000000000000000005b600061473788615595565b90508082136147465780614748565b815b94507f8000000000000000000000000000000000000000000000000000000000000000850361479b57867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0000116965061488a565b8085036148115760008512156147de57600385600003901b877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc000011617965061488a565b600385901b877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc000011660041717965061488a565b6000848152600760205260408120557ffffffffffffffffffffffffffffffffffffffffffffc00000000000000000001909616623ffffc60c284901c1617660fffffffc00000609084901c16177fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff840160341b17600217955b869550505050509250929050565b60008083126148ab5761010083056148b6565b600161010084820105035b905061010081028303826148de576000828152600460205260409020546001821b19166148f3565b6000828152600460205260409020546001821b175b60009283526004602052604090922091909155505050565b600080600080612710851015614951576040517f60121cca0000000000000000000000000000000000000000000000000000000081526179336004820152602401610272565b60008661496b6c01000000000000000000000000886159e8565b6149759190615a54565b905061498081614ae8565b60019091019550905061271061271f820204905060606149a088836159e8565b901c92506149ae8684615a12565b600086815260056020526040812054600181901c62ffffff16965091935085158015906149dc575060018216155b15614a1d5766ffffffffffffff602183901c1660ff601984901c161b614a0286826159ff565b915080600003614a1757614a17886001614898565b50614a71565b8515614a5d576000878152600660209081526040808320600360028b0181810486529190935292208054601986901c929093066055029190911b90911790555b856001019550849050614a71876001614898565b612710811015614ab1576040517f60121cca0000000000000000000000000000000000000000000000000000000081526179316004820152602401610272565b6019614ac28260386008600061458d565b6000898152600560205260409020911b600188901b179055509497939650919450925050565b600080630235b88083107473d85bca016a2338b31715f8e13054c005f8b995d384111715614b1557600080fd5b6c010000000000000000000000008310600081614b4b57506c010000000000000000000000006a52b7d2dcc80cd2e40000008502045b8115614b6e57507652b7d2dcc80cd2e40000000000000000000000000000008490045b6f037af932b2affa9738cc6c38ca5278318110614baf57614000841793506f037af932b2affa9738cc6c38ca5278316a52b7d2dcc80cd2e400000082020490505b6d010f7a088a76f267264caa114f0a8110614bec57612000841793506d010f7a088a76f267264caa114f0a6a52b7d2dcc80cd2e400000082020490505b6b95da74f87f839fc2e0dc5bd98110614c2557611000841793506b95da74f87f839fc2e0dc5bd96a52b7d2dcc80cd2e400000082020490505b6b06f55dedafd8491caed5a1b88110614c5e57610800841793506b06f55dedafd8491caed5a1b86a52b7d2dcc80cd2e400000082020490505b6b017fdd10ee11e624491b4cc18110614c9757610400841793506b017fdd10ee11e624491b4cc16a52b7d2dcc80cd2e400000082020490505b6ab23131bf0c30217b0a2c698110614cce57610200841793506ab23131bf0c30217b0a2c696a52b7d2dcc80cd2e400000082020490505b6a79683edcb9280d797aded78110614d0557610100841793506a79683edcb9280d797aded76a52b7d2dcc80cd2e400000082020490505b6a64366e2f9919f0d9b0dc908110614d3b576080841793506a64366e2f9919f0d9b0dc906a52b7d2dcc80cd2e400000082020490505b6a5b0bcda5a78850646b0a818110614d71576040841793506a5b0bcda5a78850646b0a816a52b7d2dcc80cd2e400000082020490505b6a56c840f992c70f959ae8108110614da7576020841793506a56c840f992c70f959ae8106a52b7d2dcc80cd2e400000082020490505b6a54b9cd178695194f9be0a08110614ddd576010841793506a54b9cd178695194f9be0a06a52b7d2dcc80cd2e400000082020490505b6a53b7458aff204b5e65d6818110614e13576008841793506a53b7458aff204b5e65d6816a52b7d2dcc80cd2e400000082020490505b6a53372a2f38c240d689e4008110614e49576004841793506a53372a2f38c240d689e4006a52b7d2dcc80cd2e400000082020490505b6a52f76617a04499e66400008110614e7f576002841793506a52f76617a04499e66400006a52b7d2dcc80cd2e400000082020490505b6a52d79660f3dec355c000008110614eb5576001841793506a52d79660f3dec355c000006a52b7d2dcc80cd2e400000082020490505b81614ecd57806a52b7d2dcc80cd2e400000086020492505b8115614ee9579219926a52d79660f3dec355c000008582020492505b505082811115614ef857600080fd5b915091565b600066ffffffffffffff604984901c1660ff604185901c161b808203614f27576000915050614f89565b612710613fff60a286901c168402046401ffffffff608186901c16420362ffffff60b087901c16614f5882846159e8565b614f629190615a54565b9050808311614f72576000614f76565b8083035b9350508084038381111561076757925050505b92915050565b600080600080600085875af1905080614fd9576040517fdee51a8a0000000000000000000000000000000000000000000000000000000081526201155a6004820152602401610272565b505050565b67ffffffffffffffff605b82901c811690609b83901c16811580615000575080155b1561503c576040517fd50d7512000000000000000000000000000000000000000000000000000000008152620111716004820152602401610272565b61ffff8316603a84901c6401ffffffff16428181039160ea87901c617fff16911480615066575082155b806150715750806001145b1561507e57505050915091565b64496cebb80084840283020484019350617fff60db87901c169250826001036150a957505050915091565b826001166001036150fe5760019290921c91826c7e37be2022c0914b2680000000816150d7576150d7615a25565b049250612710601e87901c613fff166b033b2e3c9fd0803ce800000085010204925061512b565b60019290921c916305f5e100601e87901c613fff166127108501026b033b2e3c9fd0803ce8000000020492505b806001166001036151625760011c61271081016b033b2e3c9fd0803ce800000082028161515a5761515a615a25565b049050615198565b60011c61271081016b033b2e3c9fd0803ce800000082028161518657615186615a25565b046b033b2e3c9fd0803ce80000000390505b760a70c3c40a64e6c51999090b65f67d92400000000000008382026127100261ffff881691900402601087901c613fff16612710030292506801b5a660ea44b8000085840283020485019450505050915091565b6000600f83811c9083901c0281681fffffffffffffffff8211615210576022615213565b60235b91821c919050617fff85811690851601810161400081101561523457600080fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00001617fff81111561527357506603ffffffffffff9250614f89915050565b600f9290921b909117949350505050565b6000617fff8381169083160360818110156152bc57600f83811c821b9085901c8602816152b3576152b3615a25565b049150506152c2565b60009150505b9392505050565b6000816fffffffffffffffffffffffffffffffff8311156152eb5760809150811c5b67ffffffffffffffff811115615303576040918201911c5b63ffffffff811115615317576020918201911c5b61ffff811115615329576010918201911c5b60ff81111561533a576008918201911c5b600f81111561534b576004918201911c5b600381111561535c576002918201911c5b600181111561536c576001820191505b8015615379576001820191505b50919050565b6000600f83901c8202816c03ffffffffffffffffffffffff82116153c6576c01ffffffffffffffffffffffff82116153bf576153ba826152c9565b6153c9565b60626153c9565b60635b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdd617fff87168201810194500191821c919050604083111561541657604083600f84901b0103925061541b565b600080fd5b505092915050565b600080600f83901c7fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000603186901b168161545f5761545f615a25565b0490506000604082901c60011461547757604061547a565b60415b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdd81019290921c91617fff8581166040019250613fdd90871690910101818111156154165703600f9190911b179050614f89565b60006040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015273ffffffffffffffffffffffffffffffffffffffff841660248201528260448201526020600060648360008a5af13d15601f3d116001600051141617169150508061558e576040517fdee51a8a000000000000000000000000000000000000000000000000000000008152620115596004820152602401610272565b5050505050565b60008060008084126155ab5761010084056155b6565b600161010085820105035b600081815260046020526040812054919350859003610100808502919091010190811b811c91505b81156155fd5760016155ef836152c9565b846101000201039350615688565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8301927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f03600101615672577f80000000000000000000000000000000000000000000000000000000000000009350615688565b60008381526004602052604090205491506155de565b505050919050565b801515811461569e57600080fd5b50565b6000602082840312156156b357600080fd5b81516152c281615690565b73ffffffffffffffffffffffffffffffffffffffff8116811461569e57600080fd5b600080600080608085870312156156f657600080fd5b8435935060208501359250604085013591506060850135615716816156be565b939692955090935050565b60006020828403121561573357600080fd5b5035919050565b6000806000806080858703121561575057600080fd5b5050823594602084013594506040840135936060013592509050565b6000806000806080858703121561578257600080fd5b8435935060208501359250604085013561579b816156be565b9150606085013561571681615690565b600080600080606085870312156157c157600080fd5b84356157cc816156be565b935060208501359250604085013567ffffffffffffffff808211156157f057600080fd5b818701915087601f83011261580457600080fd5b81358181111561581357600080fd5b88602082850101111561582557600080fd5b95989497505060200194505050565b815173ffffffffffffffffffffffffffffffffffffffff1681526101a08101602083015161587a602084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060408301516158a2604084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060608301516158ca606084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060808301516158f2608084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060a083015161591a60a084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060c083015161592f60c084018260ff169052565b5060e083015161594460e084018260ff169052565b50610100838101519083015261012080840151908301526101408084015190830152610160808401519083015261018092830151929091019190915290565b60006020828403121561599557600080fd5b5051919050565b6000602082840312156159ae57600080fd5b81516152c2816156be565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082028115828204841417614f8957614f896159b9565b80820180821115614f8957614f896159b9565b81810381811115614f8957614f896159b9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615a6357615a63615a25565b500490565b808202600082127f800000000000000000000000000000000000000000000000000000000000000084141615615aa057615aa06159b9565b8181058314821517614f8957614f896159b9565b600082615ac357615ac3615a25565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b1757615b176159b9565b500590565b8181036000831280158383131683831282161715615b3c57615b3c6159b9565b5092915050565b60007f80000000000000000000000000000000000000000000000000000000000000008203615b7457615b746159b9565b5060000390565b808201828112600083128015821682158216171561541b5761541b6159b9565b6000815180845260005b81811015615bc157602081850181015186830182015201615ba5565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b600073ffffffffffffffffffffffffffffffffffffffff8089168352876020840152866040840152808616606084015280851660808401525060c060a0830152615c4c60c0830184615b9b565b98975050505050505050565b60008060408385031215615c6b57600080fd5b505080516020909101519092909150565b600060208284031215615c8e57600080fd5b81356152c2816156be56fea2646970667358221220bd1cedb4ef1e580fa4bec1e12a6abad1d1668013e0141254313f07a6b3f9696464736f6c63430008150033",
"deployedBytecode": "0x6080604052600436106100c75760003560e01c8063540acabc11610074578063ad2075011161004e578063ad207501146104ad578063b5c736e4146104cd578063b7791bf2146104ec576100c7565b8063540acabc1461043b5780637d7c2a1c1461047d5780638433ea221461049a576100c7565b8063103f2907116100a5578063103f29071461036657806322348cc7146103bf5780632861c7d114610407576100c7565b806302161887146102de578063032d22761461031857806309f0d8cb14610346575b3480156100d357600080fd5b506040517f4502d0630000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690634502d06390602401602060405180830381865afa15801561015e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061018291906156a1565b8061023c57506040517fe04c8e5d0000000000000000000000000000000000000000000000000000000081523060048201523360248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063e04c8e5d90604401602060405180830381865afa158015610218573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061023c91906156a1565b61027b576040517f60121cca00000000000000000000000000000000000000000000000000000000815261792560048201526024015b60405180910390fd5b6102dc7f00000000000000000000000000000000000000000000000000000000000000006000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061072492505050565b005b3480156102ea57600080fd5b506102f3610770565b6040805194855260208501939093529183015260608201526080015b60405180910390f35b61032b6103263660046156e0565b610864565b6040805193845260208401929092529082015260600161030f565b34801561035257600080fd5b506102f3610361366004615721565b6123d0565b34801561037257600080fd5b5061039a7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161030f565b3480156103cb57600080fd5b506103df6103da36600461573a565b612668565b604080519586526020860194909452928401919091526060830152608082015260a00161030f565b34801561041357600080fd5b5061039a7f000000000000000000000000000000000000000000000000000000000000000081565b34801561044757600080fd5b5061046f7f000000000000000000000000000000000000000000000000000000000000000081565b60405190815260200161030f565b610485612928565b6040805192835260208301919091520161030f565b6104856104a836600461576c565b6129a8565b3480156104b957600080fd5b506102dc6104c83660046157ab565b614238565b3480156104d957600080fd5b5061046f6104e8366004615721565b5490565b3480156104f857600080fd5b50604080516101a08101825273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811682527f0000000000000000000000000000000000000000000000000000000000000000811660208301527f00000000000000000000000000000000000000000000000000000000000000008116828401527f0000000000000000000000000000000000000000000000000000000000000000811660608301527f0000000000000000000000000000000000000000000000000000000000000000811660808301527f00000000000000000000000000000000000000000000000000000000000000001660a082015260ff7f0000000000000000000000000000000000000000000000000000000000000000811660c08301527f00000000000000000000000000000000000000000000000000000000000000001660e08201527f00000000000000000000000000000000000000000000000000000000000000006101008201527f00000000000000000000000000000000000000000000000000000000000000006101208201527f00000000000000000000000000000000000000000000000000000000000000006101408201527f00000000000000000000000000000000000000000000000000000000000000006101608201527f0000000000000000000000000000000000000000000000000000000000000000610180820152905161030f9190615834565b6060600080835160208501865af43d6040519250601f19601f6020830101168301604052808352806000602085013e81156001810361076757816000803e816000fd5b50505092915050565b6000806000806107816001546123d0565b9296509094509250905067ffffffffffffffff8411806107a8575067ffffffffffffffff83115b806107ba575067ffffffffffffffff82115b806107cc575067ffffffffffffffff81115b15610807576040517f60121cca00000000000000000000000000000000000000000000000000000000815261792d6004820152602401610272565b604083811b8517608084901b1760c083901b17600855517fcde545703e0372175cadfff811d67c32910c3dcb33199679b3271c4106afdf9a906108569084908490918252602082015260400190565b60405180910390a190919293565b600080548190819060018116820361088257600181176000556108b8565b6040517f60121cca0000000000000000000000000000000000000000000000000000000081526179196004820152602401610272565b861580156108c4575085155b806109045750861580159061090457507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd8f087138015610904575061271087125b806109445750851580159061094457507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd8f086138015610944575061271086125b1561097f576040517f60121cca00000000000000000000000000000000000000000000000000000000815261791a6004820152602401610272565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1480156109d85750600087135b15610a1f57348714610a1a576040517f60121cca00000000000000000000000000000000000000000000000000000000815261791b6004820152602401610272565b610ab8565b3415610ab8577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee148015610a7e5750600086125b610ab8576040517f60121cca00000000000000000000000000000000000000000000000000000000815261791b6004820152602401610272565b610b38604051806102000160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600154610100820152600282901c620fffff166000808215610b805782600116600114610b71576207ffff600184901c16600003610ba2565b6207ffff600184901c16610ba2565b7f80000000000000000000000000000000000000000000000000000000000000005b61014085015260008c9003610cd4577f800000000000000000000000000000000000000000000000000000000000000060c08501526040517f94bf804d0000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201523360248201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906394bf804d906044016020604051808303816000875af1158015610c89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cad9190615983565b9b50847a040000000000000000000000000000000000000000000000000000019450610ef3565b60008b1280610ce3575060008a135b8015610db457506040517f6352211e000000000000000000000000000000000000000000000000000000008152600481018d905233907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690636352211e90602401602060405180830381865afa158015610d77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9b919061599c565b73ffffffffffffffffffffffffffffffffffffffff1614155b15610def576040517f60121cca00000000000000000000000000000000000000000000000000000000815261791c6004820152602401610272565b60008c8152600360205260408120549350839003610e3d576040517f60121cca0000000000000000000000000000000000000000000000000000000081526179236004820152602401610272565b66ffffffffffffff603584901c811660ff602d86901c81169190911b6060870152607585901c909116606d85901c9182161b60a086015267ffffffffffffffff16915060018084169003610eb6577f800000000000000000000000000000000000000000000000000000000000000060c0850152610ef3565b82600216600214610ed3576207ffff600284901c16600003610ede565b6207ffff600284901c165b60c0850152601583901c62ffffff1660e08501525b7f80000000000000000000000000000000000000000000000000000000000000008460c0015113156111e157602d9290921c60ff16918215610f3e5760608401516001841b01610f47565b83606001516001015b9250606083610f5c8660c0015160020b61432b565b610f6691906159e8565b610f72911c60016159ff565b608085015260c0840151600090815260056020526040902054925060018084161480610faa57508360e0015162ffffff600185901c16115b156110d257610fc78460c001518560e00151866080015186612668565b6101c089015260608801919091526080870182905260c087019290925260a0860151919350111561109b5767ffffffffffffffff6034856101c00151901c16925060ff8316600884901c901b92508360800151836110259190615a12565b9250606483101561103557606492505b60346110468460386008600161458d565b6101c086015160008581526007602052604090207ffffffffffffffffffffffffffffffffffff0000000000000000fffffffffffff9091169190921b17905560a08401516080850180519190910390526111d9565b83608001518460a00151600a546110b291906159ff565b6110bc9190615a12565b600a5560006080850181905260608501526111d9565b67ffffffffffffffff601984901c16915081600003611121576040517f60121cca00000000000000000000000000000000000000000000000000000000815261791d6004820152602401610272565b60ff8216600883901c901b915081846080015110611140576000611148565b836080015182035b915061271082101561118f57600091508361014001518460c001510361118057611177846101400151866146b6565b61014086015294505b61118f8460c001516000614898565b60196111a08360386008600061458d565b60c08601516000908152600560205260409020911b6301ffffff851617905560a08401516080850180516111d5908390615a12565b9052505b600060a08501525b60c08401516040850152606084015184526080840151602085015261010084015161120b906123d0565b6101a08801526101808701525061016085015260008b13156112b15761018084015161123c64e8d4a510008d6159e8565b6112469190615a54565b8460600181815161125791906159ff565b90525060608401516fffffffffffffffffffffffffffffffff10156112ac576040517f60121cca00000000000000000000000000000000000000000000000000000000815261792f6004820152602401610272565b611408565b60008b1215611408577fffffffffffffffffffffffffffffffff800000000000000000000000000000008b1315611364576101808401516001906112fa64e8d4a510008e615a68565b6113049190615ab4565b61130e9190615b1c565b90508360600151816000031115611355576040517f60121cca0000000000000000000000000000000000000000000000000000000081526179266004820152602401610272565b60608401805182019052611408565b7f80000000000000000000000000000000000000000000000000000000000000008b036113d25764e8d4a5100084610180015185606001516113a691906159e8565b6113b09190615a54565b6113b990615b43565b6113c4906001615b7b565b600060608601529a50611408565b6040517f60121cca00000000000000000000000000000000000000000000000000000000815261792f6004820152602401610272565b60008a13156114d8576101a084015161142664e8d4a510008c6159e8565b6114309190615a54565b61143b9060016159ff565b92506127106103ff6052866101000151901c168461145991906159e8565b6114639190615a54565b61146d90846159ff565b8460800181815161147e91906159ff565b90525060808401516fffffffffffffffffffffffffffffffff10156114d3576040517f60121cca00000000000000000000000000000000000000000000000000000000815261792f6004820152602401610272565b6115f8565b60008a12156115f8577fffffffffffffffffffffffffffffffff800000000000000000000000000000008a131561158d576101a084015161151e64e8d4a510008c615a68565b6115289190615ab4565b611533906001615b7b565b9050806000039050836080015181111561157d576040517f60121cca0000000000000000000000000000000000000000000000000000000081526179276004820152602401610272565b60808401805182900390526115f8565b7f80000000000000000000000000000000000000000000000000000000000000008a036113d257600164e8d4a51000856101a0015186608001516115d191906159e8565b6115db9190615a54565b6115e490615b43565b6115ee9190615b1c565b6000608086015299505b8a158015611604575089155b1561163f576040517f60121cca00000000000000000000000000000000000000000000000000000000815261791a6004820152602401610272565b6080840151156118b4576116778460600151633b9aca008660800151633b9aca01028161166e5761166e615a25565b0460010161490b565b60a0880152608087015260e086015260c085015260008a12156116e95783602001518460a0015185608001516116ad9190615a12565b11156116e9576040517f60121cca0000000000000000000000000000000000000000000000000000000081526179346004820152602401610272565b60008b1380156116f7575089155b1561179c578351602085015161171b906c01000000000000000000000000906159e8565b6117259190615a54565b84606001516c010000000000000000000000008660a00151876080015161174c9190615a12565b61175691906159e8565b6117609190615a54565b111561179c576040517f60121cca0000000000000000000000000000000000000000000000000000000081526179346004820152602401610272565b8361014001518460c00151126118af5760008460c00151126117c95760018460c00151901b6001176117d5565b60c084015160000360011b5b92508460021660000361181257600283901b857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00000161794506118db565b6001603486811c633fffffff16919091016000818152600760205260409020780fffffffc00000000000000000000000000000000000000000609089901b167afffff000000000000000000000000000000000000000000000000060c28a901b161790557ffffffffffffffffffffffffffffffffffffffffffffc00000000000000000000909616600285901b17601687901b179086901b179491505b6118db565b7f800000000000000000000000000000000000000000000000000000000000000060c08501525b60008b12806118ea575060008a135b15611b155773ffffffffffffffffffffffffffffffffffffffff891661190e573398505b6000846080015111801561195d57508360c00151846040015113158061195d5750633b9aca008460200151633b9aca01028161194c5761194c615a25565b046001018460a00151856080015103115b15611b15576060846101000151901c73ffffffffffffffffffffffffffffffffffffffff16638e7bfbc06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119da9190615983565b9250760a70c3c40a64e6c51999090b65f67d9240000000000000831180611a045750633b9aca0083105b15611a3f576040517f60121cca0000000000000000000000000000000000000000000000000000000081526179396004820152602401610272565b836101a00151846101800151840281611a5a57611a5a615a25565b049250722cd76fe086b93ce2f768a00b22a00000000000831115611a8f57722cd76fe086b93ce2f768a00b22a0000000000092505b6101008401516103e89060201c6103ff1684020491506b033b2e3c9fd0803ce80000006c010000000000000000000000008302049150611ace82614ae8565b5080915050808460c001511315611b15576040517f60121cca00000000000000000000000000000000000000000000000000000000815261791e6004820152602401610272565b7f80000000000000000000000000000000000000000000000000000000000000008460c001511315611b715760008460c0015112611b5e5760018460c00151901b600117611b6a565b60c084015160000360011b5b9250611b76565b600092505b60a0840151606d90611b8d9060386008600061458d565b6060860151911b90602d90611ba79060386008600061458d565b60e0870151911b9060151b600186901b8615611bc4576000611bc7565b60015b60ff1617171717600360008e81526020019081526020016000208190555060008b1215611d7057610100840151603e1c6103ff1692508215611d70576040517fb5c736e40000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063b5c736e490602401602060405180830381865afa158015611cad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cd19190615983565b6101e0850181905266ffffffffffffff600982901c1660ff600183901c161b9250611cfc9083614efd565b9050600081138015611d35575083610160015164e8d4a510008c6000030281611d2757611d27615a25565b05816103e885810385020503125b15611d70576040517f60121cca0000000000000000000000000000000000000000000000000000000081526179286004820152602401610272565b60008b1315611eee577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad967e1573eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614611e23576000611e25565b345b7f00000000000000000000000000000000000000000000000000000000000000008e600080600033604051602001611e79919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b6040516020818303038152906040526040518863ffffffff1660e01b8152600401611ea996959493929190615bff565b604080518083038185885af1158015611ec6573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611eeb9190615c58565b50505b60008a12156120bc577fffffffffffffffffffffffff11111111111111111111111111111111111111127f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1601611fb15789600003925082341115611f7357611f6e33843403614f8f565b611fb6565b82341015611f6e576040517f60121cca00000000000000000000000000000000000000000000000000000000815261791b6004820152602401610272565b600092505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad967e15847f000000000000000000000000000000000000000000000000000000000000000060008e60008033604051602001612047919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b6040516020818303038152906040526040518863ffffffff1660e01b815260040161207796959493929190615bff565b604080518083038185885af1158015612094573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906120b99190615c58565b50505b60008b12156121a157604080516000808252602082019092527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169163ad967e15917f0000000000000000000000000000000000000000000000000000000000000000918f918e9082906040518763ffffffff1660e01b815260040161215c96959493929190615bff565b60408051808303816000875af115801561217a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061219e9190615c58565b50505b60008a131561228757604080516000808252602082019092527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169163ad967e15917f000000000000000000000000000000000000000000000000000000000000000091908e9082908f906040518763ffffffff1660e01b815260040161224296959493929190615bff565b60408051808303816000875af1158015612260573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122849190615c58565b50505b67ffffffffffffffff605286901c1692508360000151846060015160ff8516600886901c901b6122b791906159ff565b6122c19190615a12565b925067ffffffffffffffff609286901c16915083602001518460a0015185608001516122ed9190615a12565b61230090600885901c60ff86161b6159ff565b61230a9190615a12565b9150609261231d8360386008600161458d565b901b60526123308560386008600061458d565b901b7ffffffffffffc00000000000000000000000000000003ffffffffffffffffffff8716171760005560408051338152602081018e90529081018c9052606081018b905273ffffffffffffffffffffffffffffffffffffffff8a1660808201527ffef64760e30a41b9d5ba7dd65ff7236a61d89ed8b44c67a29e84db1a67513a1c9060a00160405180910390a150999a98995096979650505050505050565b6008546040517fb5c736e40000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201526000918291829182916124b49073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b5c736e4906024015b602060405180830381865afa15801561248b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124af9190615983565b614fde565b506040517fb5c736e40000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015290955061254e907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063b5c736e49060240161246e565b94505067ffffffffffffffff81811690604083901c168187108061257157508086105b156125ac576040517f60121cca0000000000000000000000000000000000000000000000000000000081526179326004820152602401610272565b61271061ffff8916670de0b6b3a7640000848a670de0b6b3a764000002816125d6576125d6615a25565b040302816125e6576125e6615a25565b04945061271061ffff60108a901c16670de0b6b3a76400008389670de0b6b3a7640000028161261757612617615a25565b0403028161262757612627615a25565b049350670de0b6b3a7640000608084901c67ffffffffffffffff1686820102049450670de0b6b3a764000060c084901c858201020493505050509193509193565b600080808080868180600189901c62ffffff168b90036126ae575050601a87901c633fffffff169250603887901c6603ffffffffffff166001601989901c811614612705565b60008c8152600660205260408120600360028e0181810660550292918491048152602081019190915260400160002054901c600181811c633fffffff169750601f82901c6603ffffffffffff169450908116149150505b60008581526007602052604090205493508015612748577f80000000000000000000000000000000000000000000000000000000000000009b5060009950612914565b836003166002036127b25761276a82607486901c6603ffffffffffff166151ec565b9150600161277a600f60236159ff565b6001901b6127889190615a12565b82146127b25760a69390931c633fffffff1660008181526007602052604090205490945092612748565b83600316600314806127de575060016127cd600f60236159ff565b6001901b6127db9190615a12565b82145b1561280f577f80000000000000000000000000000000000000000000000000000000000000009b5060009950612914565b6128278a607486901c6603ffffffffffff1684615284565b9950606483048a11156128445761271061270f8b02049950612849565b600099505b89156128f0578360041660041461286c576207ffff600385901c16600003612877565b6207ffff600385901c165b9b5060006128878d60020b61432b565b905061271f612710820204633fffffff601687901c81166128a88385615a12565b6128b291906159e8565b6128bc9190615a54565b6128c690826159ff565b6128dd6c010000000000000000000000008e6159e8565b6128e79190615a54565b97505050612914565b7f80000000000000000000000000000000000000000000000000000000000000009b505b8b8a97509750505050945094509450945094565b60008061298c7f00000000000000000000000000000000000000000000000000000000000000006000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061072492505050565b80602001905181019061299f9190615c58565b90939092509050565b6000806129dd6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b600080549060018216900361088257600181176000557fffffffffffffffffffffffff11111111111111111111111111111111111111127f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1601612ab857873414158015612a78575061dead73ffffffffffffffffffffffffffffffffffffffff871614155b15612ab3576040517f60121cca0000000000000000000000000000000000000000000000000000000081526179206004820152602401610272565b612af4565b3415612af4576040517f60121cca0000000000000000000000000000000000000000000000000000000081526179206004820152602401610272565b6001548252600281901c620fffff16600003612b40576040517f60121cca00000000000000000000000000000000000000000000000000000000815261791f6004820152602401610272565b8151612b4b906123d0565b90919250909150836060018460800182815250828152505050612bc86040518061018001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b612c016040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60008060608660000151901c73ffffffffffffffffffffffffffffffffffffffff1663f3190c896040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c7b9190615983565b9150760a70c3c40a64e6c51999090b65f67d9240000000000000821180612ca0575081155b15612cdb576040517f60121cca0000000000000000000000000000000000000000000000000000000081526179396004820152602401610272565b85608001518660600151830281612cf457612cf4615a25565b049150722cd76fe086b93ce2f768a00b22a00000000000821115612d2957722cd76fe086b93ce2f768a00b22a0000000000091505b81760a70c3c40a64e6c51999090b65f67d924000000000000081612d4f57612d4f615a25565b875191900491506127109060481c6103ff16810182020460608501526b033b2e3c9fd0803ce80000006c010000000000000000000000008302875191900492506103e890602a1c6103ff168302049050612da881614ae8565b50602087015285516103e89060341c6103ff168302049050612dc981614ae8565b506040870152600480861614612deb576207ffff600386901c16600003612df6565b6207ffff600386901c165b60c0850181905260408701511215612f2757612ec77f0000000000000000000000000000000000000000000000000000000000000000868860400151604051602401612e4c929190918252602082015260400190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f9e3e482100000000000000000000000000000000000000000000000000000000179052610724565b806020019051810190612eda9190615983565b945084600416600414612ef9576207ffff600386901c16600003612f04565b6207ffff600386901c165b60c085015260008c9003612f2757505050600091825550925082915061422f9050565b6127108c1080612f4657506fffffffffffffffffffffffffffffffff8c115b15612f81576040517f60121cca00000000000000000000000000000000000000000000000000000000815261792e6004820152602401610272565b6002851615612f91576002612f94565b60015b60ff1684610100018181525050612fe16040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60c08501518152601686901c633fffffff16808552600090815260076020908152604082205490860181905260741c6603ffffffffffff16606086018190529003613034576603ffffffffc00060608501525b602084015160c41c620fffff169250821561307b5782600116600114613066576207ffff600184901c16600003613071565b6207ffff600184901c165b60808501526130a2565b7f800000000000000000000000000000000000000000000000000000000000000060808501525b866080015164e8d4a510008e02816130bc576130bc615a25565b0480865266ffffffffffffff609a88901c1660ff609289901c161b92506130e7633b9aca0084615a54565b1115613123576040517f60121cca00000000000000000000000000000000000000000000000000000000815261792e6004820152602401610272565b89156131b65760025485516fffffffffffffffffffffffffffffffff8216945060809190911c925083111561319b578451839061316090846159e8565b61316a9190615a54565b60a0860181905261317b9083615a12565b855160808088018290526000885282901b940393841760025591506131b6565b6000600255845183900385526080850183905260a085018290525b86602001518560c001511315613d4557845115613d45576040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081018290528190680100000000000000009060008960c0015112613232576101008960c001518161322c5761322c615a25565b0561324f565b60016101008a60c001516001018161324c5761324c615a25565b05035b6040820152845161325f9061432b565b604086015261010089015160010361328a57604085015160e08a015260c08901516020820152613391565b61271f856040015161271002816132a3576132a3615a25565b046060860181905260408601510360808601819052602089015160161c633fffffff90811660c0880181905290910260608701519190040160e08a0152845160208c01516001011480156132fb57508460c001516001145b156133915773ffffffffffffffffffffffffffffffffffffffff8f1661dead0361335b576040517fcc36aa440000000000000000000000000000000000000000000000000000000081526000600482018190526024820152604401610272565b6040517f60121cca0000000000000000000000000000000000000000000000000000000081526179356004820152602401610272565b8861010001516001036134015760c0890180516000908152600560205260408082205460608c01518c5194518452919092206301fffffe8316601a9490941b9390931760389190911b1760011790915566ffffffffffffff602182901c1660ff601983901c161b97509550613424565b67ffffffffffffffff60348960200151901c16965060ff8716600888901c901b96505b868960200181815161343691906159ff565b90525060e08901516134556c01000000000000000000000000896159e8565b61345f9190615a54565b8960400181815161347091906159ff565b90525060c0890151602082015114801561348f57508861010001516001145b8061349c57506080810151155b156135cc5780608001516000036134c55760408082015160009081526004602052205460808201525b88610100015160010361351c57604081015160c08a015160009081036101009283020190910160608301819052608083018051821b90911c90819052900361351c5760408082015160009081526004602052908120555b60808101511561354a57600161353582608001516152c9565b604083015161010002010360208201526135cc565b8a602001518160400151610100021215613589577f800000000000000000000000000000000000000000000000000000000000000060208201526135cc565b604080820180517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190819052600090815260046020522054608082015261351c565b806020015188608001511380156135ea57508a602001518860800151135b156136075760808801516101208a015260026101608a0152613643565b8a602001518160200151131561362f5760208101516101208a015260016101608a0152613643565b60208b01516101208a015260036101608a01525b61365489610120015160020b61432b565b60408601526101608901516002036136e85761271f8560400151612710028161367f5761367f615a25565b046060860181905260408087015191909103608087019081526020808b015160a61c633fffffff908116600090815260079092529290205460a08b0181905260161c821660c0880181905290510260608701519190040160a086018190526101408a0152613705565b604085015160a086018190526101408a0152633fffffff60c08601525b6c010000000000000000000000008961014001518a6060015161372891906159e8565b6137329190615a54565b613748906b033b2e3c9fd0803ce8000000615a12565b8960e001518a602001518b610140015161376291906159e8565b61376c9190615a54565b8a6020015161377b9190615a12565b613791906b033b2e3c9fd0803ce80000006159e8565b61379b9190615a54565b93506b033b2e3c9fd0803ce80000008960600151856137ba91906159e8565b6137c49190615a54565b9250838960200151036137df576137dc600185615a12565b93505b8851841015806137f457508861016001516003145b15613b5f576080810151604080830151600090815260046020522055885184106139d457885160608a01519094506b033b2e3c9fd0803ce80000009061383a90866159e8565b6138449190615a54565b92508289604001516138569190615a12565b6c01000000000000000000000000858b602001516138749190615a12565b61387e91906159e8565b6138889190615a54565b965061389387614ae8565b60608701528086526101208a01511380156138b55750633fffffff8560c00151145b156138cd5784516002018552600160c08601526139e7565b8451600101855261016089015160021480156138ee57506101208901518551145b6138f95760006138ff565b8460c001515b9550612710856060015161271f028161391a5761391a615a25565b046040860181905260608601519081900360808701819052908803633fffffff028161394857613948615a25565b0460c086018190521561397957633fffffff8560c00151101561396f578460c0015161397c565b633ffffffe61397c565b60015b60c0860152851580159061399457508460c001518610155b156139cf576040517f60121cca0000000000000000000000000000000000000000000000000000000081526179386004820152602401610272565b6139e7565b6101208901516001908101865260c08601525b60208901516139f68582615a12565b613a0090846159e8565b613a0a9190615a54565b91508389608001818151613a1e91906159ff565b905250602089018051859190613a35908390615a12565b90525060a089018051849190613a4c9083906159ff565b905250604089018051849190613a63908390615a12565b9052506060880151613a75908361537f565b6060890152602089015160641115613abd576040517f60121cca0000000000000000000000000000000000000000000000000000000081526179306004820152602401610272565b8451600013613ad3578451600190811b17613adc565b845160000360011b5b606089015160208b015191975060741b90603490613aff9060386008600161458d565b901b60168760c00151901b600289901b60a6808d60200151901c901b60011717171717600760008a6000015181526020019081526020016000208190555060168860000151901b600287901b6034808d901c901b60021717179950613d40565b885184900389526020890151613b758582615a12565b613b7f90846159e8565b613b899190615a54565b91508389608001818151613b9d91906159ff565b905250602089018051859190613bb4908390615a12565b90525060a089018051849190613bcb9083906159ff565b905250604089018051849190613be2908390615a12565b9052506060880151613bf4908361537f565b6060890152610160890151680100000000000000009250600203613d1957633fffffff60a68960200151901c1696508760a00151955060006603ffffffffffff607488901c1690506000613c558a606001518361542390919063ffffffff16565b6020808c0180518d516000908152600790935260409092207fffffffffffffffffffffffc00000000000000000000000000000000000000000909216607484901b17600217909155998b5298889052506060890181905260c487901c620fffff16978815613cef5788600116600114613cda576207ffff60018a901c16600003613ce5565b6207ffff60018a901c165b60808b0152613d16565b7f800000000000000000000000000000000000000000000000000000000000000060808b01525b50505b61012089015160c08a01526101608901516101008a015261014089015160e08a0152613391565b505050505b64e8d4a5100087608001518660800151613d5f91906159e8565b613d699190615a54565b985064e8d4a5100087606001518660a00151613d8591906159e8565b613d8f9190615a54565b97508c891115613db357613da3898e615a54565b613dad90896159e8565b97508c98505b88600003613df1576040517f60121cca0000000000000000000000000000000000000000000000000000000081526179356004820152602401610272565b8b89613e058a670de0b6b3a76400006159e8565b613e0f9190615a54565b1015613e4b576040517f60121cca0000000000000000000000000000000000000000000000000000000081526179216004820152602401610272565b73ffffffffffffffffffffffffffffffffffffffff8b1661dead03613ea6576040517fcc36aa4400000000000000000000000000000000000000000000000000000000815260048101899052602481018a9052604401610272565b7fffffffffffffffffffffffff11111111111111111111111111111111111111127f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1601613f1f5788925034891015613f1a57613f1a338a3403614f8f565b613f24565b600092505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad967e15847f000000000000000000000000000000000000000000000000000000000000000060008d60000360008033604051602001613fb8919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b6040516020818303038152906040526040518863ffffffff1660e01b8152600401613fe896959493929190615bff565b604080518083038185885af1158015614005573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061402a9190615c58565b505073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663ad967e157f000000000000000000000000000000000000000000000000000000000000000060008b8103908f81806040519080825280601f01601f1916602001820160405280156140bc576020820181803683370190505b506040518763ffffffff1660e01b81526004016140de96959493929190615bff565b60408051808303816000875af11580156140fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141209190615c58565b505067ffffffffffffffff605287901c1692508460a0015160ff8416600885901c901b61414d9190615a12565b925067ffffffffffffffff609287901c169150846080015160ff8316600884901c901b61417a9190615a12565b9150609261418d8360386008600161458d565b901b60526141a08560386008600061458d565b7ffffffffffffc00000000000000000000000000000003ffffffffffffffffffff8916911b171760005560408051338152602081018a90529081018a905273ffffffffffffffffffffffffffffffffffffffff8c1660608201527f80fd9cc6b1821f4a510e45ffce6852ea3404807b5d3d833ffa85664408afcb669060800160405180910390a1505050505050505b94509492505050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146142ab576040517f60121cca0000000000000000000000000000000000000000000000000000000081526179296004820152602401610272565b6000546001166000036142ee576040517f60121cca00000000000000000000000000000000000000000000000000000000815261792a6004820152602401610272565b614325846142fe83850185615c7c565b7f0000000000000000000000000000000000000000000000000000000000000000866154ce565b50505050565b600060ff82901d80831803617fff81111561434557600080fd5b700100000000000000000000000000000000600182161561437357506fff9dd7de423466c20352b1246ce4856f5b6002821615614392576fff3bd55f4488ad277531fa1c725a66d00260801c5b60048216156143b1576ffe78410fd6498b73cb96a6917f8532590260801c5b60088216156143d0576ffcf2d9987c9be178ad5bfeffaa1232730260801c5b60108216156143ef576ff9ef02c4529258b057769680fc6601b30260801c5b602082161561440e576ff402d288133a85a17784a411f7aba0820260801c5b604082161561442d576fe895615b5beb6386553757b0352bda900260801c5b608082161561444c576fd34f17a00ffa00a8309940a15930391a0260801c5b61010082161561446c576fae6b7961714e20548d88ea5123f9a0ff0260801c5b61020082161561448c576f76d6461f27082d74e0feed3b388c0ca10260801c5b6104008216156144ac576f372a3bfe0745d8b6b19d985d9a8b85bb0260801c5b6108008216156144cc576f0be32cbee48979763cf7247dd7bb539d0260801c5b6110008216156144eb576e8d4f70c9ff4924dac37612d1e2921e0260801c5b612000821615614509576d4e009ae5519380809a02ca7aec770260801c5b614000821615614525576b17c45e641b6e95dee056ff100260801c5b600091507f80000000000000000000000000000000000000000000000000000000000000008416614583577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0463ffffffff81161561458357600191505b60201c0192915050565b600080856fffffffffffffffffffffffffffffffff8111156145b05760809150811c5b67ffffffffffffffff8111156145c8576040918201911c5b63ffffffff8111156145dc576020918201911c5b61ffff8111156145ee576010918201911c5b60ff8111156145ff576008918201911c5b600f811115614610576004918201911c5b6003811115614621576002918201911c5b6001811115614631576001820191505b801561463e576001820191505b508481101561464a5750835b848103905085811c6000821184161561469957600181019050806001871b0361469957506001908101907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86011b5b6001851b82106146a857600080fd5b90931b909201949350505050565b601681901c633fffffff166000818152600760205260408120549091829182600160c483901c811690036146f4575060c581901c6207ffff1661472c565b5060c581901c6207ffff1660008190039061472c57507f80000000000000000000000000000000000000000000000000000000000000005b600061473788615595565b90508082136147465780614748565b815b94507f8000000000000000000000000000000000000000000000000000000000000000850361479b57867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0000116965061488a565b8085036148115760008512156147de57600385600003901b877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc000011617965061488a565b600385901b877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc000011660041717965061488a565b6000848152600760205260408120557ffffffffffffffffffffffffffffffffffffffffffffc00000000000000000001909616623ffffc60c284901c1617660fffffffc00000609084901c16177fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff840160341b17600217955b869550505050509250929050565b60008083126148ab5761010083056148b6565b600161010084820105035b905061010081028303826148de576000828152600460205260409020546001821b19166148f3565b6000828152600460205260409020546001821b175b60009283526004602052604090922091909155505050565b600080600080612710851015614951576040517f60121cca0000000000000000000000000000000000000000000000000000000081526179336004820152602401610272565b60008661496b6c01000000000000000000000000886159e8565b6149759190615a54565b905061498081614ae8565b60019091019550905061271061271f820204905060606149a088836159e8565b901c92506149ae8684615a12565b600086815260056020526040812054600181901c62ffffff16965091935085158015906149dc575060018216155b15614a1d5766ffffffffffffff602183901c1660ff601984901c161b614a0286826159ff565b915080600003614a1757614a17886001614898565b50614a71565b8515614a5d576000878152600660209081526040808320600360028b0181810486529190935292208054601986901c929093066055029190911b90911790555b856001019550849050614a71876001614898565b612710811015614ab1576040517f60121cca0000000000000000000000000000000000000000000000000000000081526179316004820152602401610272565b6019614ac28260386008600061458d565b6000898152600560205260409020911b600188901b179055509497939650919450925050565b600080630235b88083107473d85bca016a2338b31715f8e13054c005f8b995d384111715614b1557600080fd5b6c010000000000000000000000008310600081614b4b57506c010000000000000000000000006a52b7d2dcc80cd2e40000008502045b8115614b6e57507652b7d2dcc80cd2e40000000000000000000000000000008490045b6f037af932b2affa9738cc6c38ca5278318110614baf57614000841793506f037af932b2affa9738cc6c38ca5278316a52b7d2dcc80cd2e400000082020490505b6d010f7a088a76f267264caa114f0a8110614bec57612000841793506d010f7a088a76f267264caa114f0a6a52b7d2dcc80cd2e400000082020490505b6b95da74f87f839fc2e0dc5bd98110614c2557611000841793506b95da74f87f839fc2e0dc5bd96a52b7d2dcc80cd2e400000082020490505b6b06f55dedafd8491caed5a1b88110614c5e57610800841793506b06f55dedafd8491caed5a1b86a52b7d2dcc80cd2e400000082020490505b6b017fdd10ee11e624491b4cc18110614c9757610400841793506b017fdd10ee11e624491b4cc16a52b7d2dcc80cd2e400000082020490505b6ab23131bf0c30217b0a2c698110614cce57610200841793506ab23131bf0c30217b0a2c696a52b7d2dcc80cd2e400000082020490505b6a79683edcb9280d797aded78110614d0557610100841793506a79683edcb9280d797aded76a52b7d2dcc80cd2e400000082020490505b6a64366e2f9919f0d9b0dc908110614d3b576080841793506a64366e2f9919f0d9b0dc906a52b7d2dcc80cd2e400000082020490505b6a5b0bcda5a78850646b0a818110614d71576040841793506a5b0bcda5a78850646b0a816a52b7d2dcc80cd2e400000082020490505b6a56c840f992c70f959ae8108110614da7576020841793506a56c840f992c70f959ae8106a52b7d2dcc80cd2e400000082020490505b6a54b9cd178695194f9be0a08110614ddd576010841793506a54b9cd178695194f9be0a06a52b7d2dcc80cd2e400000082020490505b6a53b7458aff204b5e65d6818110614e13576008841793506a53b7458aff204b5e65d6816a52b7d2dcc80cd2e400000082020490505b6a53372a2f38c240d689e4008110614e49576004841793506a53372a2f38c240d689e4006a52b7d2dcc80cd2e400000082020490505b6a52f76617a04499e66400008110614e7f576002841793506a52f76617a04499e66400006a52b7d2dcc80cd2e400000082020490505b6a52d79660f3dec355c000008110614eb5576001841793506a52d79660f3dec355c000006a52b7d2dcc80cd2e400000082020490505b81614ecd57806a52b7d2dcc80cd2e400000086020492505b8115614ee9579219926a52d79660f3dec355c000008582020492505b505082811115614ef857600080fd5b915091565b600066ffffffffffffff604984901c1660ff604185901c161b808203614f27576000915050614f89565b612710613fff60a286901c168402046401ffffffff608186901c16420362ffffff60b087901c16614f5882846159e8565b614f629190615a54565b9050808311614f72576000614f76565b8083035b9350508084038381111561076757925050505b92915050565b600080600080600085875af1905080614fd9576040517fdee51a8a0000000000000000000000000000000000000000000000000000000081526201155a6004820152602401610272565b505050565b67ffffffffffffffff605b82901c811690609b83901c16811580615000575080155b1561503c576040517fd50d7512000000000000000000000000000000000000000000000000000000008152620111716004820152602401610272565b61ffff8316603a84901c6401ffffffff16428181039160ea87901c617fff16911480615066575082155b806150715750806001145b1561507e57505050915091565b64496cebb80084840283020484019350617fff60db87901c169250826001036150a957505050915091565b826001166001036150fe5760019290921c91826c7e37be2022c0914b2680000000816150d7576150d7615a25565b049250612710601e87901c613fff166b033b2e3c9fd0803ce800000085010204925061512b565b60019290921c916305f5e100601e87901c613fff166127108501026b033b2e3c9fd0803ce8000000020492505b806001166001036151625760011c61271081016b033b2e3c9fd0803ce800000082028161515a5761515a615a25565b049050615198565b60011c61271081016b033b2e3c9fd0803ce800000082028161518657615186615a25565b046b033b2e3c9fd0803ce80000000390505b760a70c3c40a64e6c51999090b65f67d92400000000000008382026127100261ffff881691900402601087901c613fff16612710030292506801b5a660ea44b8000085840283020485019450505050915091565b6000600f83811c9083901c0281681fffffffffffffffff8211615210576022615213565b60235b91821c919050617fff85811690851601810161400081101561523457600080fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00001617fff81111561527357506603ffffffffffff9250614f89915050565b600f9290921b909117949350505050565b6000617fff8381169083160360818110156152bc57600f83811c821b9085901c8602816152b3576152b3615a25565b049150506152c2565b60009150505b9392505050565b6000816fffffffffffffffffffffffffffffffff8311156152eb5760809150811c5b67ffffffffffffffff811115615303576040918201911c5b63ffffffff811115615317576020918201911c5b61ffff811115615329576010918201911c5b60ff81111561533a576008918201911c5b600f81111561534b576004918201911c5b600381111561535c576002918201911c5b600181111561536c576001820191505b8015615379576001820191505b50919050565b6000600f83901c8202816c03ffffffffffffffffffffffff82116153c6576c01ffffffffffffffffffffffff82116153bf576153ba826152c9565b6153c9565b60626153c9565b60635b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdd617fff87168201810194500191821c919050604083111561541657604083600f84901b0103925061541b565b600080fd5b505092915050565b600080600f83901c7fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000603186901b168161545f5761545f615a25565b0490506000604082901c60011461547757604061547a565b60415b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdd81019290921c91617fff8581166040019250613fdd90871690910101818111156154165703600f9190911b179050614f89565b60006040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015273ffffffffffffffffffffffffffffffffffffffff841660248201528260448201526020600060648360008a5af13d15601f3d116001600051141617169150508061558e576040517fdee51a8a000000000000000000000000000000000000000000000000000000008152620115596004820152602401610272565b5050505050565b60008060008084126155ab5761010084056155b6565b600161010085820105035b600081815260046020526040812054919350859003610100808502919091010190811b811c91505b81156155fd5760016155ef836152c9565b846101000201039350615688565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8301927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f03600101615672577f80000000000000000000000000000000000000000000000000000000000000009350615688565b60008381526004602052604090205491506155de565b505050919050565b801515811461569e57600080fd5b50565b6000602082840312156156b357600080fd5b81516152c281615690565b73ffffffffffffffffffffffffffffffffffffffff8116811461569e57600080fd5b600080600080608085870312156156f657600080fd5b8435935060208501359250604085013591506060850135615716816156be565b939692955090935050565b60006020828403121561573357600080fd5b5035919050565b6000806000806080858703121561575057600080fd5b5050823594602084013594506040840135936060013592509050565b6000806000806080858703121561578257600080fd5b8435935060208501359250604085013561579b816156be565b9150606085013561571681615690565b600080600080606085870312156157c157600080fd5b84356157cc816156be565b935060208501359250604085013567ffffffffffffffff808211156157f057600080fd5b818701915087601f83011261580457600080fd5b81358181111561581357600080fd5b88602082850101111561582557600080fd5b95989497505060200194505050565b815173ffffffffffffffffffffffffffffffffffffffff1681526101a08101602083015161587a602084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060408301516158a2604084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060608301516158ca606084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060808301516158f2608084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060a083015161591a60a084018273ffffffffffffffffffffffffffffffffffffffff169052565b5060c083015161592f60c084018260ff169052565b5060e083015161594460e084018260ff169052565b50610100838101519083015261012080840151908301526101408084015190830152610160808401519083015261018092830151929091019190915290565b60006020828403121561599557600080fd5b5051919050565b6000602082840312156159ae57600080fd5b81516152c2816156be565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082028115828204841417614f8957614f896159b9565b80820180821115614f8957614f896159b9565b81810381811115614f8957614f896159b9565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615a6357615a63615a25565b500490565b808202600082127f800000000000000000000000000000000000000000000000000000000000000084141615615aa057615aa06159b9565b8181058314821517614f8957614f896159b9565b600082615ac357615ac3615a25565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b1757615b176159b9565b500590565b8181036000831280158383131683831282161715615b3c57615b3c6159b9565b5092915050565b60007f80000000000000000000000000000000000000000000000000000000000000008203615b7457615b746159b9565b5060000390565b808201828112600083128015821682158216171561541b5761541b6159b9565b6000815180845260005b81811015615bc157602081850181015186830182015201615ba5565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b600073ffffffffffffffffffffffffffffffffffffffff8089168352876020840152866040840152808616606084015280851660808401525060c060a0830152615c4c60c0830184615b9b565b98975050505050505050565b60008060408385031215615c6b57600080fd5b505080516020909101519092909150565b600060208284031215615c8e57600080fd5b81356152c2816156be56fea2646970667358221220bd1cedb4ef1e580fa4bec1e12a6abad1d1668013e0141254313f07a6b3f9696464736f6c63430008150033"
}