diff --git a/cli/cmd/staking.go b/cli/cmd/staking.go index d244c5266..400d13ff0 100644 --- a/cli/cmd/staking.go +++ b/cli/cmd/staking.go @@ -277,12 +277,7 @@ func newDelegateCmd() *cobra.Command { return cmd } -<<<<<<< HEAD func Delegate(ctx context.Context, cfg DelegateConfig) error { -======= -// Note(zodomo): This still needs to be updated to support non-self delegation. -func delegate(ctx context.Context, cfg delegateConfig) error { ->>>>>>> b893b3e (implemented user stake delegation, cli still only supports validator self-delegation) delegatorPriv, err := cfg.privateKey() if err != nil { return err diff --git a/contracts/allocs/devnet.json b/contracts/allocs/devnet.json index d77e31ab1..a4cee20d9 100644 --- a/contracts/allocs/devnet.json +++ b/contracts/allocs/devnet.json @@ -12612,7 +12612,7 @@ }, "0x333333fffffffffffffffffffffffffffffffffe": { "balance": "0x0", - "code": "0x6080604052600436106101145760003560e01c806384b0196e116100a0578063c6a2aac811610064578063c6a2aac814610306578063cf8e629a1461031b578063d146fd1b14610330578063eb4bd8441461034a578063f2fde38b1461035d57600080fd5b806384b0196e146102515780638ab65686146102795780638da5cb5b1461028c5780638f38fae8146102d3578063a5a470ad146102f357600080fd5b8063400ada75116100e7578063400ada75146101ab57806359bcddde146101cb5780635cd8a76b146101e7578063715018a6146101fc57806384768b7a1461021157600080fd5b8063117407e31461011957806311bcd8301461013b578063296192f41461016b5780633f0b1edf1461018b575b600080fd5b34801561012557600080fd5b50610139610134366004611817565b61037d565b005b34801561014757600080fd5b5061015868056bc75e2d6310000081565b6040519081526020015b60405180910390f35b34801561017757600080fd5b5061015861018636600461188c565b61044d565b34801561019757600080fd5b506101396101a6366004611817565b6104b3565b3480156101b757600080fd5b506101396101c63660046118ca565b61057f565b3480156101d757600080fd5b50610158670de0b6b3a764000081565b3480156101f357600080fd5b506101396106ce565b34801561020857600080fd5b506101396107d1565b34801561021d57600080fd5b5061024161022c366004611906565b60016020526000908152604090205460ff1681565b6040519015158152602001610162565b34801561025d57600080fd5b506102666107e5565b6040516101629796959493929190611967565b610139610287366004611a00565b610896565b34801561029857600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546040516001600160a01b039091168152602001610162565b3480156102df57600080fd5b506101396102ee3660046118ca565b610985565b610139610301366004611a7c565b610a35565b34801561031257600080fd5b50610139610b5b565b34801561032757600080fd5b50610139610b99565b34801561033c57600080fd5b506000546102419060ff1681565b610139610358366004611abe565b610bd4565b34801561036957600080fd5b50610139610378366004611906565b610d61565b610385610d9f565b60005b818110156104485760018060008585858181106103a7576103a7611b11565b90506020020160208101906103bc9190611906565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558282828181106103f6576103f6611b11565b905060200201602081019061040b9190611906565b6001600160a01b03167fc6bdfc1f9b9f1f30ad26b86a7c623e58400512467a50e0c80439bfdaf3a2de9860405160405180910390a2600101610388565b505050565b604080517fc9a51567e61a6d1a243a60e57bf4560e7e543694b79349ce2cba3a14fe21b0426020820152908101839052606081018290526000906104aa906080015b60405160208183030381529060405280519060200120610dfa565b90505b92915050565b6104bb610d9f565b60005b81811015610448576000600160008585858181106104de576104de611b11565b90506020020160208101906104f39190611906565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905582828281811061052d5761052d611b11565b90506020020160208101906105429190611906565b6001600160a01b03167f3df1f5fcca9e1ece84ca685a63062905d8fe97ddb23246224be416f2d3c8613f60405160405180910390a26001016104be565b600080516020611dcd8339815191528054600160401b810460ff16159067ffffffffffffffff166000811580156105b35750825b905060008267ffffffffffffffff1660011480156105d05750303b155b9050811580156105de575080155b156105fc5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561062657845460ff60401b1916600160401b1785555b61062f87610e27565b610671604051806040016040528060078152602001665374616b696e6760c81b815250604051806040016040528060018152602001603160f81b815250610e38565b6000805460ff191687151517905583156106c557845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b600080516020611dcd833981519152805460029190600160401b900460ff16806107065750805467ffffffffffffffff808416911610155b156107245760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff191667ffffffffffffffff831617600160401b17815560408051808201825260078152665374616b696e6760c81b602080830191909152825180840190935260018352603160f81b9083015261078591610e38565b805460ff60401b1916815560405167ffffffffffffffff831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050565b6107d9610d9f565b6107e36000610e4e565b565b60006060808280808381600080516020611dad833981519152805490915015801561081257506001810154155b61085b5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b60448201526064015b60405180910390fd5b610863610ebf565b61086b610f82565b60408051600080825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b60005460ff1615806108c057506001600160a01b03811660009081526001602052604090205460ff165b61090c5760405162461bcd60e51b815260206004820152601860248201527f5374616b696e673a206e6f7420616c6c6f7765642076616c00000000000000006044820152606401610852565b670de0b6b3a76400003410156109345760405162461bcd60e51b815260040161085290611b3d565b806001600160a01b0316826001600160a01b03167f510b11bb3f3c799b11307c01ab7db0d335683ef5b2da98f7697de744f465eacc3460405161097991815260200190565b60405180910390a35050565b600080516020611dcd8339815191528054600160401b810460ff16159067ffffffffffffffff166000811580156109b95750825b905060008267ffffffffffffffff1660011480156109d65750303b155b9050811580156109e4575080155b15610a025760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610a2c57845460ff60401b1916600160401b1785555b61067187610e27565b60005460ff161580610a5657503360009081526001602052604090205460ff165b610a995760405162461bcd60e51b815260206004820152601460248201527314dd185ada5b99ce881b9bdd08185b1b1bddd95960621b6044820152606401610852565b68056bc75e2d63100000341015610ac25760405162461bcd60e51b815260040161085290611b3d565b610acc8282610fc1565b610b125760405162461bcd60e51b81526020600482015260176024820152765374616b696e673a20696e76616c6964207075626b657960481b6044820152606401610852565b336001600160a01b03167fc7abef7b73f049da6a9bc2349ba5066a39e316eabc9f671b6f9406aa9490a453838334604051610b4f93929190611b74565b60405180910390a25050565b610b63610d9f565b6000805460ff191660011781556040517f8a943acd5f4e6d3df7565a4a08a93f6b04cc31bb6c01ca4aef7abd6baf455ec39190a1565b610ba1610d9f565b6000805460ff191681556040517f2d35c8d348a345fd7b3b03b7cfcf7ad0b60c2d46742d5ca536342e4185becb079190a1565b60005460ff161580610bf557503360009081526001602052604090205460ff165b610c385760405162461bcd60e51b815260206004820152601460248201527314dd185ada5b99ce881b9bdd08185b1b1bddd95960621b6044820152606401610852565b68056bc75e2d63100000341015610c615760405162461bcd60e51b815260040161085290611b3d565b610c6b8484611115565b610cb15760405162461bcd60e51b81526020600482015260176024820152765374616b696e673a20696e76616c6964207075626b657960481b6044820152606401610852565b610cbd8484848461112b565b610d095760405162461bcd60e51b815260206004820152601a60248201527f5374616b696e673a20696e76616c6964207369676e61747572650000000000006044820152606401610852565b6000610d1585856111e3565b9050336001600160a01b03167fc7abef7b73f049da6a9bc2349ba5066a39e316eabc9f671b6f9406aa9490a4538234604051610d52929190611bad565b60405180910390a25050505050565b610d69610d9f565b6001600160a01b038116610d9357604051631e4fbdf760e01b815260006004820152602401610852565b610d9c81610e4e565b50565b33610dd17f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146107e35760405163118cdaa760e01b8152336004820152602401610852565b60006104ad610e07611230565b8360405161190160f01b8152600281019290925260228201526042902090565b610e2f61123f565b610d9c81611276565b610e4061123f565b610e4a828261127e565b5050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1028054606091600080516020611dad83398151915291610efe90611bcf565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2a90611bcf565b8015610f775780601f10610f4c57610100808354040283529160200191610f77565b820191906000526020600020905b815481529060010190602001808311610f5a57829003601f168201915b505050505091505090565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1038054606091600080516020611dad83398151915291610efe90611bcf565b6000602182146110135760405162461bcd60e51b815260206004820152601e60248201527f5374616b696e673a20696e76616c6964207075626b6579206c656e67746800006044820152606401610852565b8282600081811061102657611026611b11565b9050013560f81c60f81b6001600160f81b031916600260f81b148061107457508282600081811061105957611059611b11565b9050013560f81c60f81b6001600160f81b031916600360f81b145b6110c05760405162461bcd60e51b815260206004820152601e60248201527f5374616b696e673a20696e76616c6964207075626b65792070726566697800006044820152606401610852565b600183013560006110f5858583816110da576110da611b11565b919091013560f81c905083600060076401000003d0196112df565b905061110c8282600060076401000003d019611411565b95945050505050565b60006104aa83838360076401000003d019611411565b604080517fc9a51567e61a6d1a243a60e57bf4560e7e543694b79349ce2cba3a14fe21b04260208201529081018590526060810184905260009081906111739060800161048f565b905060006111b78286868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506114ca92505050565b5050905060006111c78888611517565b6001600160a01b03928316921691909114979650505050505050565b606060006111f5600184166002611c1f565b6040805160f89290921b6001600160f81b03191660208301526021808301969096528051808303909601865260419091019052509192915050565b600061123a61154d565b905090565b600080516020611dcd83398151915254600160401b900460ff166107e357604051631afcd79f60e31b815260040160405180910390fd5b610d6961123f565b61128661123f565b600080516020611dad8339815191527fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1026112c08482611c88565b50600381016112cf8382611c88565b5060008082556001909101555050565b60008560ff16600214806112f657508560ff166003145b61135c5760405162461bcd60e51b815260206004820152603160248201527f456c6c697074696343757276653a696e6e76616c696420636f6d7072657373656044820152700c8408a8640e0ded2dce840e0e4caccd2f607b1b6064820152608401610852565b6000828061136c5761136c611d48565b838061137a5761137a611d48565b85858061138957611389611d48565b888a0908848061139b5761139b611d48565b85806113a9576113a9611d48565b898a0989090890506113d28160046113c2866001611d5e565b6113cc9190611d71565b856115c1565b9050600060026113e560ff8a1684611d5e565b6113ef9190611d85565b15611403576113fe8285611d99565b611405565b815b98975050505050505050565b60008515806114205750818610155b80611429575084155b806114345750818510155b156114415750600061110c565b6000828061145157611451611d48565b86870990506000838061146657611466611d48565b88858061147557611475611d48565b8a8b0909905085156114a557838061148f5761148f611d48565b848061149d5761149d611d48565b878a09820890505b84156114bf5783806114b9576114b9611d48565b85820890505b149695505050505050565b600080600083516041036115045760208401516040850151606086015160001a6114f68882858561169a565b955095509550505050611510565b50508151600091506002905b9250925092565b60408051818152606081018252600091829190602082018180368337505050602081019485526040810193909352505051902090565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611578611769565b6115806117d3565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6000816000036116135760405162461bcd60e51b815260206004820152601e60248201527f456c6c697074696343757276653a206d6f64756c7573206973207a65726f00006044820152606401610852565b8360000361162357506000611693565b8260000361163357506001611693565b6001600160ff1b5b801561168f57838186161515870a85848509099150836002820486161515870a85848509099150836004820486161515870a85848509099150836008820486161515870a858485090991506010900461163b565b5090505b9392505050565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156116d5575060009150600390508261175f565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015611729573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166117555750600092506001915082905061175f565b9250600091508190505b9450945094915050565b6000600080516020611dad83398151915281611783610ebf565b80519091501561179b57805160209091012092915050565b815480156117aa579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b6000600080516020611dad833981519152816117ed610f82565b80519091501561180557805160209091012092915050565b600182015480156117aa579392505050565b6000806020838503121561182a57600080fd5b823567ffffffffffffffff8082111561184257600080fd5b818501915085601f83011261185657600080fd5b81358181111561186557600080fd5b8660208260051b850101111561187a57600080fd5b60209290920196919550909350505050565b6000806040838503121561189f57600080fd5b50508035926020909101359150565b80356001600160a01b03811681146118c557600080fd5b919050565b600080604083850312156118dd57600080fd5b6118e6836118ae565b9150602083013580151581146118fb57600080fd5b809150509250929050565b60006020828403121561191857600080fd5b6104aa826118ae565b6000815180845260005b818110156119475760208185018101518683018201520161192b565b506000602082860101526020601f19601f83011685010191505092915050565b60ff60f81b881681526000602060e0602084015261198860e084018a611921565b838103604085015261199a818a611921565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b818110156119ee578351835292840192918401916001016119d2565b50909c9b505050505050505050505050565b60008060408385031215611a1357600080fd5b611a1c836118ae565b9150611a2a602084016118ae565b90509250929050565b60008083601f840112611a4557600080fd5b50813567ffffffffffffffff811115611a5d57600080fd5b602083019150836020828501011115611a7557600080fd5b9250929050565b60008060208385031215611a8f57600080fd5b823567ffffffffffffffff811115611aa657600080fd5b611ab285828601611a33565b90969095509350505050565b60008060008060608587031215611ad457600080fd5b8435935060208501359250604085013567ffffffffffffffff811115611af957600080fd5b611b0587828801611a33565b95989497509550505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6020808252601d908201527f5374616b696e673a20696e73756666696369656e74206465706f736974000000604082015260600190565b604081528260408201528284606083013760006060848301015260006060601f19601f8601168301019050826020830152949350505050565b604081526000611bc06040830185611921565b90508260208301529392505050565b600181811c90821680611be357607f821691505b602082108103611c0357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60ff81811683821601908111156104ad576104ad611c09565b601f821115610448576000816000526020600020601f850160051c81016020861015611c615750805b601f850160051c820191505b81811015611c8057828155600101611c6d565b505050505050565b815167ffffffffffffffff811115611ca257611ca2611b27565b611cb681611cb08454611bcf565b84611c38565b602080601f831160018114611ceb5760008415611cd35750858301515b600019600386901b1c1916600185901b178555611c80565b600085815260208120601f198616915b82811015611d1a57888601518255948401946001909101908401611cfb565b5085821015611d385787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601260045260246000fd5b808201808211156104ad576104ad611c09565b600082611d8057611d80611d48565b500490565b600082611d9457611d94611d48565b500690565b818103818111156104ad576104ad611c0956fea16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a26469706673582212209ec1de4b1ad9f96937cdc63dd5d0c5e8f62af7eef29a7e85ce59896560b0f83264736f6c63430008180033", + "code": "0x60806040526004361061011f5760003560e01c806384768b7a116100a0578063c6a2aac811610064578063c6a2aac814610324578063cf8e629a14610339578063d146fd1b1461034e578063eb4bd84414610368578063f2fde38b1461037b57600080fd5b806384768b7a1461024257806384b0196e146102825780638da5cb5b146102aa5780638f38fae8146102f1578063a5a470ad1461031157600080fd5b806359bcddde116100e757806359bcddde146101d65780635c19a95c146101f25780635cd8a76b14610205578063715018a61461021a57806378fcbe5b1461022f57600080fd5b8063117407e31461012457806311bcd83014610146578063296192f4146101765780633f0b1edf14610196578063400ada75146101b6575b600080fd5b34801561013057600080fd5b5061014461013f36600461190c565b61039b565b005b34801561015257600080fd5b5061016368056bc75e2d6310000081565b6040519081526020015b60405180910390f35b34801561018257600080fd5b50610163610191366004611981565b61046b565b3480156101a257600080fd5b506101446101b136600461190c565b6104d1565b3480156101c257600080fd5b506101446101d13660046119bf565b61059d565b3480156101e257600080fd5b50610163670de0b6b3a764000081565b6101446102003660046119fb565b6106ec565b34801561021157600080fd5b506101446107cd565b34801561022657600080fd5b506101446108d0565b61014461023d366004611a16565b6108e4565b34801561024e57600080fd5b5061027261025d3660046119fb565b60016020526000908152604090205460ff1681565b604051901515815260200161016d565b34801561028e57600080fd5b506102976109ce565b60405161016d9796959493929190611a8f565b3480156102b657600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546040516001600160a01b03909116815260200161016d565b3480156102fd57600080fd5b5061014461030c3660046119bf565b610a7a565b61014461031f366004611b71565b610b2a565b34801561033057600080fd5b50610144610c50565b34801561034557600080fd5b50610144610c8e565b34801561035a57600080fd5b506000546102729060ff1681565b610144610376366004611bb3565b610cc9565b34801561038757600080fd5b506101446103963660046119fb565b610e56565b6103a3610e94565b60005b818110156104665760018060008585858181106103c5576103c5611c06565b90506020020160208101906103da91906119fb565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905582828281811061041457610414611c06565b905060200201602081019061042991906119fb565b6001600160a01b03167fc6bdfc1f9b9f1f30ad26b86a7c623e58400512467a50e0c80439bfdaf3a2de9860405160405180910390a26001016103a6565b505050565b604080517fc9a51567e61a6d1a243a60e57bf4560e7e543694b79349ce2cba3a14fe21b0426020820152908101839052606081018290526000906104c8906080015b60405160208183030381529060405280519060200120610eef565b90505b92915050565b6104d9610e94565b60005b81811015610466576000600160008585858181106104fc576104fc611c06565b905060200201602081019061051191906119fb565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905582828281811061054b5761054b611c06565b905060200201602081019061056091906119fb565b6001600160a01b03167f3df1f5fcca9e1ece84ca685a63062905d8fe97ddb23246224be416f2d3c8613f60405160405180910390a26001016104dc565b600080516020611ec28339815191528054600160401b810460ff16159067ffffffffffffffff166000811580156105d15750825b905060008267ffffffffffffffff1660011480156105ee5750303b155b9050811580156105fc575080155b1561061a5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561064457845460ff60401b1916600160401b1785555b61064d87610f1c565b61068f604051806040016040528060078152602001665374616b696e6760c81b815250604051806040016040528060018152602001603160f81b815250610f2d565b6000805460ff191687151517905583156106e357845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b60005460ff16158061071657506001600160a01b03811660009081526001602052604090205460ff165b6107625760405162461bcd60e51b815260206004820152601860248201527714dd185ada5b99ce881b9bdd08185b1b1bddd959081d985b60421b60448201526064015b60405180910390fd5b670de0b6b3a764000034101561078a5760405162461bcd60e51b815260040161075990611c1c565b6040513481526001600160a01b0382169033907f510b11bb3f3c799b11307c01ab7db0d335683ef5b2da98f7697de744f465eacc9060200160405180910390a350565b600080516020611ec2833981519152805460029190600160401b900460ff16806108055750805467ffffffffffffffff808416911610155b156108235760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff191667ffffffffffffffff831617600160401b17815560408051808201825260078152665374616b696e6760c81b602080830191909152825180840190935260018352603160f81b9083015261088491610f2d565b805460ff60401b1916815560405167ffffffffffffffff831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050565b6108d8610e94565b6108e26000610f43565b565b60005460ff16158061090e57506001600160a01b03811660009081526001602052604090205460ff165b6109555760405162461bcd60e51b815260206004820152601860248201527714dd185ada5b99ce881b9bdd08185b1b1bddd959081d985b60421b6044820152606401610759565b670de0b6b3a764000034101561097d5760405162461bcd60e51b815260040161075990611c1c565b806001600160a01b0316826001600160a01b03167f510b11bb3f3c799b11307c01ab7db0d335683ef5b2da98f7697de744f465eacc346040516109c291815260200190565b60405180910390a35050565b60006060808280808381600080516020611ea283398151915280549091501580156109fb57506001810154155b610a3f5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606401610759565b610a47610fb4565b610a4f611077565b60408051600080825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b600080516020611ec28339815191528054600160401b810460ff16159067ffffffffffffffff16600081158015610aae5750825b905060008267ffffffffffffffff166001148015610acb5750303b155b905081158015610ad9575080155b15610af75760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610b2157845460ff60401b1916600160401b1785555b61068f87610f1c565b60005460ff161580610b4b57503360009081526001602052604090205460ff165b610b8e5760405162461bcd60e51b815260206004820152601460248201527314dd185ada5b99ce881b9bdd08185b1b1bddd95960621b6044820152606401610759565b68056bc75e2d63100000341015610bb75760405162461bcd60e51b815260040161075990611c1c565b610bc182826110b6565b610c075760405162461bcd60e51b81526020600482015260176024820152765374616b696e673a20696e76616c6964207075626b657960481b6044820152606401610759565b336001600160a01b03167fc7abef7b73f049da6a9bc2349ba5066a39e316eabc9f671b6f9406aa9490a453838334604051610c4493929190611c69565b60405180910390a25050565b610c58610e94565b6000805460ff191660011781556040517f8a943acd5f4e6d3df7565a4a08a93f6b04cc31bb6c01ca4aef7abd6baf455ec39190a1565b610c96610e94565b6000805460ff191681556040517f2d35c8d348a345fd7b3b03b7cfcf7ad0b60c2d46742d5ca536342e4185becb079190a1565b60005460ff161580610cea57503360009081526001602052604090205460ff165b610d2d5760405162461bcd60e51b815260206004820152601460248201527314dd185ada5b99ce881b9bdd08185b1b1bddd95960621b6044820152606401610759565b68056bc75e2d63100000341015610d565760405162461bcd60e51b815260040161075990611c1c565b610d60848461120a565b610da65760405162461bcd60e51b81526020600482015260176024820152765374616b696e673a20696e76616c6964207075626b657960481b6044820152606401610759565b610db284848484611220565b610dfe5760405162461bcd60e51b815260206004820152601a60248201527f5374616b696e673a20696e76616c6964207369676e61747572650000000000006044820152606401610759565b6000610e0a85856112d8565b9050336001600160a01b03167fc7abef7b73f049da6a9bc2349ba5066a39e316eabc9f671b6f9406aa9490a4538234604051610e47929190611ca2565b60405180910390a25050505050565b610e5e610e94565b6001600160a01b038116610e8857604051631e4fbdf760e01b815260006004820152602401610759565b610e9181610f43565b50565b33610ec67f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146108e25760405163118cdaa760e01b8152336004820152602401610759565b60006104cb610efc611325565b8360405161190160f01b8152600281019290925260228201526042902090565b610f24611334565b610e918161136b565b610f35611334565b610f3f8282611373565b5050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1028054606091600080516020611ea283398151915291610ff390611cc4565b80601f016020809104026020016040519081016040528092919081815260200182805461101f90611cc4565b801561106c5780601f106110415761010080835404028352916020019161106c565b820191906000526020600020905b81548152906001019060200180831161104f57829003601f168201915b505050505091505090565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1038054606091600080516020611ea283398151915291610ff390611cc4565b6000602182146111085760405162461bcd60e51b815260206004820152601e60248201527f5374616b696e673a20696e76616c6964207075626b6579206c656e67746800006044820152606401610759565b8282600081811061111b5761111b611c06565b9050013560f81c60f81b6001600160f81b031916600260f81b148061116957508282600081811061114e5761114e611c06565b9050013560f81c60f81b6001600160f81b031916600360f81b145b6111b55760405162461bcd60e51b815260206004820152601e60248201527f5374616b696e673a20696e76616c6964207075626b65792070726566697800006044820152606401610759565b600183013560006111ea858583816111cf576111cf611c06565b919091013560f81c905083600060076401000003d0196113d4565b90506112018282600060076401000003d019611506565b95945050505050565b60006104c883838360076401000003d019611506565b604080517fc9a51567e61a6d1a243a60e57bf4560e7e543694b79349ce2cba3a14fe21b0426020820152908101859052606081018490526000908190611268906080016104ad565b905060006112ac8286868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506115bf92505050565b5050905060006112bc888861160c565b6001600160a01b03928316921691909114979650505050505050565b606060006112ea600184166002611d14565b6040805160f89290921b6001600160f81b03191660208301526021808301969096528051808303909601865260419091019052509192915050565b600061132f611642565b905090565b600080516020611ec283398151915254600160401b900460ff166108e257604051631afcd79f60e31b815260040160405180910390fd5b610e5e611334565b61137b611334565b600080516020611ea28339815191527fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1026113b58482611d7d565b50600381016113c48382611d7d565b5060008082556001909101555050565b60008560ff16600214806113eb57508560ff166003145b6114515760405162461bcd60e51b815260206004820152603160248201527f456c6c697074696343757276653a696e6e76616c696420636f6d7072657373656044820152700c8408a8640e0ded2dce840e0e4caccd2f607b1b6064820152608401610759565b6000828061146157611461611e3d565b838061146f5761146f611e3d565b85858061147e5761147e611e3d565b888a0908848061149057611490611e3d565b858061149e5761149e611e3d565b898a0989090890506114c78160046114b7866001611e53565b6114c19190611e66565b856116b6565b9050600060026114da60ff8a1684611e53565b6114e49190611e7a565b156114f8576114f38285611e8e565b6114fa565b815b98975050505050505050565b60008515806115155750818610155b8061151e575084155b806115295750818510155b1561153657506000611201565b6000828061154657611546611e3d565b86870990506000838061155b5761155b611e3d565b88858061156a5761156a611e3d565b8a8b09099050851561159a57838061158457611584611e3d565b848061159257611592611e3d565b878a09820890505b84156115b45783806115ae576115ae611e3d565b85820890505b149695505050505050565b600080600083516041036115f95760208401516040850151606086015160001a6115eb8882858561178f565b955095509550505050611605565b50508151600091506002905b9250925092565b60408051818152606081018252600091829190602082018180368337505050602081019485526040810193909352505051902090565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61166d61185e565b6116756118c8565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6000816000036117085760405162461bcd60e51b815260206004820152601e60248201527f456c6c697074696343757276653a206d6f64756c7573206973207a65726f00006044820152606401610759565b8360000361171857506000611788565b8260000361172857506001611788565b6001600160ff1b5b801561178457838186161515870a85848509099150836002820486161515870a85848509099150836004820486161515870a85848509099150836008820486161515870a8584850909915060109004611730565b5090505b9392505050565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156117ca5750600091506003905082611854565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561181e573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661184a57506000925060019150829050611854565b9250600091508190505b9450945094915050565b6000600080516020611ea283398151915281611878610fb4565b80519091501561189057805160209091012092915050565b8154801561189f579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b6000600080516020611ea2833981519152816118e2611077565b8051909150156118fa57805160209091012092915050565b6001820154801561189f579392505050565b6000806020838503121561191f57600080fd5b823567ffffffffffffffff8082111561193757600080fd5b818501915085601f83011261194b57600080fd5b81358181111561195a57600080fd5b8660208260051b850101111561196f57600080fd5b60209290920196919550909350505050565b6000806040838503121561199457600080fd5b50508035926020909101359150565b80356001600160a01b03811681146119ba57600080fd5b919050565b600080604083850312156119d257600080fd5b6119db836119a3565b9150602083013580151581146119f057600080fd5b809150509250929050565b600060208284031215611a0d57600080fd5b6104c8826119a3565b60008060408385031215611a2957600080fd5b611a32836119a3565b9150611a40602084016119a3565b90509250929050565b6000815180845260005b81811015611a6f57602081850181015186830182015201611a53565b506000602082860101526020601f19601f83011685010191505092915050565b60ff60f81b881681526000602060e06020840152611ab060e084018a611a49565b8381036040850152611ac2818a611a49565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015611b1657835183529284019291840191600101611afa565b50909c9b505050505050505050505050565b60008083601f840112611b3a57600080fd5b50813567ffffffffffffffff811115611b5257600080fd5b602083019150836020828501011115611b6a57600080fd5b9250929050565b60008060208385031215611b8457600080fd5b823567ffffffffffffffff811115611b9b57600080fd5b611ba785828601611b28565b90969095509350505050565b60008060008060608587031215611bc957600080fd5b8435935060208501359250604085013567ffffffffffffffff811115611bee57600080fd5b611bfa87828801611b28565b95989497509550505050565b634e487b7160e01b600052603260045260246000fd5b6020808252601d908201527f5374616b696e673a20696e73756666696369656e74206465706f736974000000604082015260600190565b634e487b7160e01b600052604160045260246000fd5b604081528260408201528284606083013760006060848301015260006060601f19601f8601168301019050826020830152949350505050565b604081526000611cb56040830185611a49565b90508260208301529392505050565b600181811c90821680611cd857607f821691505b602082108103611cf857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60ff81811683821601908111156104cb576104cb611cfe565b601f821115610466576000816000526020600020601f850160051c81016020861015611d565750805b601f850160051c820191505b81811015611d7557828155600101611d62565b505050505050565b815167ffffffffffffffff811115611d9757611d97611c53565b611dab81611da58454611cc4565b84611d2d565b602080601f831160018114611de05760008415611dc85750858301515b600019600386901b1c1916600185901b178555611d75565b600085815260208120601f198616915b82811015611e0f57888601518255948401946001909101908401611df0565b5085821015611e2d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601260045260246000fd5b808201808211156104cb576104cb611cfe565b600082611e7557611e75611e3d565b500490565b600082611e8957611e89611e3d565b500690565b818103818111156104cb576104cb611cfe56fea16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a264697066735822122057ddea58705967f95dd719b1291a1c26f48f1f5098c7783101c5cdc9cb35c6d664736f6c63430008180033", "nonce": "0x0", "storage": { "0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00": "0x000000000000000000000000000000000000000000000000ffffffffffffffff" diff --git a/contracts/allocs/staging.json b/contracts/allocs/staging.json index 3ec1945f7..078234181 100644 --- a/contracts/allocs/staging.json +++ b/contracts/allocs/staging.json @@ -12612,7 +12612,7 @@ }, "0x333333fffffffffffffffffffffffffffffffffe": { "balance": "0x0", - "code": "0x6080604052600436106101145760003560e01c806384b0196e116100a0578063c6a2aac811610064578063c6a2aac814610306578063cf8e629a1461031b578063d146fd1b14610330578063eb4bd8441461034a578063f2fde38b1461035d57600080fd5b806384b0196e146102515780638ab65686146102795780638da5cb5b1461028c5780638f38fae8146102d3578063a5a470ad146102f357600080fd5b8063400ada75116100e7578063400ada75146101ab57806359bcddde146101cb5780635cd8a76b146101e7578063715018a6146101fc57806384768b7a1461021157600080fd5b8063117407e31461011957806311bcd8301461013b578063296192f41461016b5780633f0b1edf1461018b575b600080fd5b34801561012557600080fd5b50610139610134366004611817565b61037d565b005b34801561014757600080fd5b5061015868056bc75e2d6310000081565b6040519081526020015b60405180910390f35b34801561017757600080fd5b5061015861018636600461188c565b61044d565b34801561019757600080fd5b506101396101a6366004611817565b6104b3565b3480156101b757600080fd5b506101396101c63660046118ca565b61057f565b3480156101d757600080fd5b50610158670de0b6b3a764000081565b3480156101f357600080fd5b506101396106ce565b34801561020857600080fd5b506101396107d1565b34801561021d57600080fd5b5061024161022c366004611906565b60016020526000908152604090205460ff1681565b6040519015158152602001610162565b34801561025d57600080fd5b506102666107e5565b6040516101629796959493929190611967565b610139610287366004611a00565b610896565b34801561029857600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546040516001600160a01b039091168152602001610162565b3480156102df57600080fd5b506101396102ee3660046118ca565b610985565b610139610301366004611a7c565b610a35565b34801561031257600080fd5b50610139610b5b565b34801561032757600080fd5b50610139610b99565b34801561033c57600080fd5b506000546102419060ff1681565b610139610358366004611abe565b610bd4565b34801561036957600080fd5b50610139610378366004611906565b610d61565b610385610d9f565b60005b818110156104485760018060008585858181106103a7576103a7611b11565b90506020020160208101906103bc9190611906565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558282828181106103f6576103f6611b11565b905060200201602081019061040b9190611906565b6001600160a01b03167fc6bdfc1f9b9f1f30ad26b86a7c623e58400512467a50e0c80439bfdaf3a2de9860405160405180910390a2600101610388565b505050565b604080517fc9a51567e61a6d1a243a60e57bf4560e7e543694b79349ce2cba3a14fe21b0426020820152908101839052606081018290526000906104aa906080015b60405160208183030381529060405280519060200120610dfa565b90505b92915050565b6104bb610d9f565b60005b81811015610448576000600160008585858181106104de576104de611b11565b90506020020160208101906104f39190611906565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905582828281811061052d5761052d611b11565b90506020020160208101906105429190611906565b6001600160a01b03167f3df1f5fcca9e1ece84ca685a63062905d8fe97ddb23246224be416f2d3c8613f60405160405180910390a26001016104be565b600080516020611dcd8339815191528054600160401b810460ff16159067ffffffffffffffff166000811580156105b35750825b905060008267ffffffffffffffff1660011480156105d05750303b155b9050811580156105de575080155b156105fc5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561062657845460ff60401b1916600160401b1785555b61062f87610e27565b610671604051806040016040528060078152602001665374616b696e6760c81b815250604051806040016040528060018152602001603160f81b815250610e38565b6000805460ff191687151517905583156106c557845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b600080516020611dcd833981519152805460029190600160401b900460ff16806107065750805467ffffffffffffffff808416911610155b156107245760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff191667ffffffffffffffff831617600160401b17815560408051808201825260078152665374616b696e6760c81b602080830191909152825180840190935260018352603160f81b9083015261078591610e38565b805460ff60401b1916815560405167ffffffffffffffff831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050565b6107d9610d9f565b6107e36000610e4e565b565b60006060808280808381600080516020611dad833981519152805490915015801561081257506001810154155b61085b5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b60448201526064015b60405180910390fd5b610863610ebf565b61086b610f82565b60408051600080825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b60005460ff1615806108c057506001600160a01b03811660009081526001602052604090205460ff165b61090c5760405162461bcd60e51b815260206004820152601860248201527f5374616b696e673a206e6f7420616c6c6f7765642076616c00000000000000006044820152606401610852565b670de0b6b3a76400003410156109345760405162461bcd60e51b815260040161085290611b3d565b806001600160a01b0316826001600160a01b03167f510b11bb3f3c799b11307c01ab7db0d335683ef5b2da98f7697de744f465eacc3460405161097991815260200190565b60405180910390a35050565b600080516020611dcd8339815191528054600160401b810460ff16159067ffffffffffffffff166000811580156109b95750825b905060008267ffffffffffffffff1660011480156109d65750303b155b9050811580156109e4575080155b15610a025760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610a2c57845460ff60401b1916600160401b1785555b61067187610e27565b60005460ff161580610a5657503360009081526001602052604090205460ff165b610a995760405162461bcd60e51b815260206004820152601460248201527314dd185ada5b99ce881b9bdd08185b1b1bddd95960621b6044820152606401610852565b68056bc75e2d63100000341015610ac25760405162461bcd60e51b815260040161085290611b3d565b610acc8282610fc1565b610b125760405162461bcd60e51b81526020600482015260176024820152765374616b696e673a20696e76616c6964207075626b657960481b6044820152606401610852565b336001600160a01b03167fc7abef7b73f049da6a9bc2349ba5066a39e316eabc9f671b6f9406aa9490a453838334604051610b4f93929190611b74565b60405180910390a25050565b610b63610d9f565b6000805460ff191660011781556040517f8a943acd5f4e6d3df7565a4a08a93f6b04cc31bb6c01ca4aef7abd6baf455ec39190a1565b610ba1610d9f565b6000805460ff191681556040517f2d35c8d348a345fd7b3b03b7cfcf7ad0b60c2d46742d5ca536342e4185becb079190a1565b60005460ff161580610bf557503360009081526001602052604090205460ff165b610c385760405162461bcd60e51b815260206004820152601460248201527314dd185ada5b99ce881b9bdd08185b1b1bddd95960621b6044820152606401610852565b68056bc75e2d63100000341015610c615760405162461bcd60e51b815260040161085290611b3d565b610c6b8484611115565b610cb15760405162461bcd60e51b81526020600482015260176024820152765374616b696e673a20696e76616c6964207075626b657960481b6044820152606401610852565b610cbd8484848461112b565b610d095760405162461bcd60e51b815260206004820152601a60248201527f5374616b696e673a20696e76616c6964207369676e61747572650000000000006044820152606401610852565b6000610d1585856111e3565b9050336001600160a01b03167fc7abef7b73f049da6a9bc2349ba5066a39e316eabc9f671b6f9406aa9490a4538234604051610d52929190611bad565b60405180910390a25050505050565b610d69610d9f565b6001600160a01b038116610d9357604051631e4fbdf760e01b815260006004820152602401610852565b610d9c81610e4e565b50565b33610dd17f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146107e35760405163118cdaa760e01b8152336004820152602401610852565b60006104ad610e07611230565b8360405161190160f01b8152600281019290925260228201526042902090565b610e2f61123f565b610d9c81611276565b610e4061123f565b610e4a828261127e565b5050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1028054606091600080516020611dad83398151915291610efe90611bcf565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2a90611bcf565b8015610f775780601f10610f4c57610100808354040283529160200191610f77565b820191906000526020600020905b815481529060010190602001808311610f5a57829003601f168201915b505050505091505090565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1038054606091600080516020611dad83398151915291610efe90611bcf565b6000602182146110135760405162461bcd60e51b815260206004820152601e60248201527f5374616b696e673a20696e76616c6964207075626b6579206c656e67746800006044820152606401610852565b8282600081811061102657611026611b11565b9050013560f81c60f81b6001600160f81b031916600260f81b148061107457508282600081811061105957611059611b11565b9050013560f81c60f81b6001600160f81b031916600360f81b145b6110c05760405162461bcd60e51b815260206004820152601e60248201527f5374616b696e673a20696e76616c6964207075626b65792070726566697800006044820152606401610852565b600183013560006110f5858583816110da576110da611b11565b919091013560f81c905083600060076401000003d0196112df565b905061110c8282600060076401000003d019611411565b95945050505050565b60006104aa83838360076401000003d019611411565b604080517fc9a51567e61a6d1a243a60e57bf4560e7e543694b79349ce2cba3a14fe21b04260208201529081018590526060810184905260009081906111739060800161048f565b905060006111b78286868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506114ca92505050565b5050905060006111c78888611517565b6001600160a01b03928316921691909114979650505050505050565b606060006111f5600184166002611c1f565b6040805160f89290921b6001600160f81b03191660208301526021808301969096528051808303909601865260419091019052509192915050565b600061123a61154d565b905090565b600080516020611dcd83398151915254600160401b900460ff166107e357604051631afcd79f60e31b815260040160405180910390fd5b610d6961123f565b61128661123f565b600080516020611dad8339815191527fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1026112c08482611c88565b50600381016112cf8382611c88565b5060008082556001909101555050565b60008560ff16600214806112f657508560ff166003145b61135c5760405162461bcd60e51b815260206004820152603160248201527f456c6c697074696343757276653a696e6e76616c696420636f6d7072657373656044820152700c8408a8640e0ded2dce840e0e4caccd2f607b1b6064820152608401610852565b6000828061136c5761136c611d48565b838061137a5761137a611d48565b85858061138957611389611d48565b888a0908848061139b5761139b611d48565b85806113a9576113a9611d48565b898a0989090890506113d28160046113c2866001611d5e565b6113cc9190611d71565b856115c1565b9050600060026113e560ff8a1684611d5e565b6113ef9190611d85565b15611403576113fe8285611d99565b611405565b815b98975050505050505050565b60008515806114205750818610155b80611429575084155b806114345750818510155b156114415750600061110c565b6000828061145157611451611d48565b86870990506000838061146657611466611d48565b88858061147557611475611d48565b8a8b0909905085156114a557838061148f5761148f611d48565b848061149d5761149d611d48565b878a09820890505b84156114bf5783806114b9576114b9611d48565b85820890505b149695505050505050565b600080600083516041036115045760208401516040850151606086015160001a6114f68882858561169a565b955095509550505050611510565b50508151600091506002905b9250925092565b60408051818152606081018252600091829190602082018180368337505050602081019485526040810193909352505051902090565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611578611769565b6115806117d3565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6000816000036116135760405162461bcd60e51b815260206004820152601e60248201527f456c6c697074696343757276653a206d6f64756c7573206973207a65726f00006044820152606401610852565b8360000361162357506000611693565b8260000361163357506001611693565b6001600160ff1b5b801561168f57838186161515870a85848509099150836002820486161515870a85848509099150836004820486161515870a85848509099150836008820486161515870a858485090991506010900461163b565b5090505b9392505050565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156116d5575060009150600390508261175f565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015611729573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166117555750600092506001915082905061175f565b9250600091508190505b9450945094915050565b6000600080516020611dad83398151915281611783610ebf565b80519091501561179b57805160209091012092915050565b815480156117aa579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b6000600080516020611dad833981519152816117ed610f82565b80519091501561180557805160209091012092915050565b600182015480156117aa579392505050565b6000806020838503121561182a57600080fd5b823567ffffffffffffffff8082111561184257600080fd5b818501915085601f83011261185657600080fd5b81358181111561186557600080fd5b8660208260051b850101111561187a57600080fd5b60209290920196919550909350505050565b6000806040838503121561189f57600080fd5b50508035926020909101359150565b80356001600160a01b03811681146118c557600080fd5b919050565b600080604083850312156118dd57600080fd5b6118e6836118ae565b9150602083013580151581146118fb57600080fd5b809150509250929050565b60006020828403121561191857600080fd5b6104aa826118ae565b6000815180845260005b818110156119475760208185018101518683018201520161192b565b506000602082860101526020601f19601f83011685010191505092915050565b60ff60f81b881681526000602060e0602084015261198860e084018a611921565b838103604085015261199a818a611921565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b818110156119ee578351835292840192918401916001016119d2565b50909c9b505050505050505050505050565b60008060408385031215611a1357600080fd5b611a1c836118ae565b9150611a2a602084016118ae565b90509250929050565b60008083601f840112611a4557600080fd5b50813567ffffffffffffffff811115611a5d57600080fd5b602083019150836020828501011115611a7557600080fd5b9250929050565b60008060208385031215611a8f57600080fd5b823567ffffffffffffffff811115611aa657600080fd5b611ab285828601611a33565b90969095509350505050565b60008060008060608587031215611ad457600080fd5b8435935060208501359250604085013567ffffffffffffffff811115611af957600080fd5b611b0587828801611a33565b95989497509550505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6020808252601d908201527f5374616b696e673a20696e73756666696369656e74206465706f736974000000604082015260600190565b604081528260408201528284606083013760006060848301015260006060601f19601f8601168301019050826020830152949350505050565b604081526000611bc06040830185611921565b90508260208301529392505050565b600181811c90821680611be357607f821691505b602082108103611c0357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60ff81811683821601908111156104ad576104ad611c09565b601f821115610448576000816000526020600020601f850160051c81016020861015611c615750805b601f850160051c820191505b81811015611c8057828155600101611c6d565b505050505050565b815167ffffffffffffffff811115611ca257611ca2611b27565b611cb681611cb08454611bcf565b84611c38565b602080601f831160018114611ceb5760008415611cd35750858301515b600019600386901b1c1916600185901b178555611c80565b600085815260208120601f198616915b82811015611d1a57888601518255948401946001909101908401611cfb565b5085821015611d385787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601260045260246000fd5b808201808211156104ad576104ad611c09565b600082611d8057611d80611d48565b500490565b600082611d9457611d94611d48565b500690565b818103818111156104ad576104ad611c0956fea16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a26469706673582212209ec1de4b1ad9f96937cdc63dd5d0c5e8f62af7eef29a7e85ce59896560b0f83264736f6c63430008180033", + "code": "0x60806040526004361061011f5760003560e01c806384768b7a116100a0578063c6a2aac811610064578063c6a2aac814610324578063cf8e629a14610339578063d146fd1b1461034e578063eb4bd84414610368578063f2fde38b1461037b57600080fd5b806384768b7a1461024257806384b0196e146102825780638da5cb5b146102aa5780638f38fae8146102f1578063a5a470ad1461031157600080fd5b806359bcddde116100e757806359bcddde146101d65780635c19a95c146101f25780635cd8a76b14610205578063715018a61461021a57806378fcbe5b1461022f57600080fd5b8063117407e31461012457806311bcd83014610146578063296192f4146101765780633f0b1edf14610196578063400ada75146101b6575b600080fd5b34801561013057600080fd5b5061014461013f36600461190c565b61039b565b005b34801561015257600080fd5b5061016368056bc75e2d6310000081565b6040519081526020015b60405180910390f35b34801561018257600080fd5b50610163610191366004611981565b61046b565b3480156101a257600080fd5b506101446101b136600461190c565b6104d1565b3480156101c257600080fd5b506101446101d13660046119bf565b61059d565b3480156101e257600080fd5b50610163670de0b6b3a764000081565b6101446102003660046119fb565b6106ec565b34801561021157600080fd5b506101446107cd565b34801561022657600080fd5b506101446108d0565b61014461023d366004611a16565b6108e4565b34801561024e57600080fd5b5061027261025d3660046119fb565b60016020526000908152604090205460ff1681565b604051901515815260200161016d565b34801561028e57600080fd5b506102976109ce565b60405161016d9796959493929190611a8f565b3480156102b657600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546040516001600160a01b03909116815260200161016d565b3480156102fd57600080fd5b5061014461030c3660046119bf565b610a7a565b61014461031f366004611b71565b610b2a565b34801561033057600080fd5b50610144610c50565b34801561034557600080fd5b50610144610c8e565b34801561035a57600080fd5b506000546102729060ff1681565b610144610376366004611bb3565b610cc9565b34801561038757600080fd5b506101446103963660046119fb565b610e56565b6103a3610e94565b60005b818110156104665760018060008585858181106103c5576103c5611c06565b90506020020160208101906103da91906119fb565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905582828281811061041457610414611c06565b905060200201602081019061042991906119fb565b6001600160a01b03167fc6bdfc1f9b9f1f30ad26b86a7c623e58400512467a50e0c80439bfdaf3a2de9860405160405180910390a26001016103a6565b505050565b604080517fc9a51567e61a6d1a243a60e57bf4560e7e543694b79349ce2cba3a14fe21b0426020820152908101839052606081018290526000906104c8906080015b60405160208183030381529060405280519060200120610eef565b90505b92915050565b6104d9610e94565b60005b81811015610466576000600160008585858181106104fc576104fc611c06565b905060200201602081019061051191906119fb565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905582828281811061054b5761054b611c06565b905060200201602081019061056091906119fb565b6001600160a01b03167f3df1f5fcca9e1ece84ca685a63062905d8fe97ddb23246224be416f2d3c8613f60405160405180910390a26001016104dc565b600080516020611ec28339815191528054600160401b810460ff16159067ffffffffffffffff166000811580156105d15750825b905060008267ffffffffffffffff1660011480156105ee5750303b155b9050811580156105fc575080155b1561061a5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561064457845460ff60401b1916600160401b1785555b61064d87610f1c565b61068f604051806040016040528060078152602001665374616b696e6760c81b815250604051806040016040528060018152602001603160f81b815250610f2d565b6000805460ff191687151517905583156106e357845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b60005460ff16158061071657506001600160a01b03811660009081526001602052604090205460ff165b6107625760405162461bcd60e51b815260206004820152601860248201527714dd185ada5b99ce881b9bdd08185b1b1bddd959081d985b60421b60448201526064015b60405180910390fd5b670de0b6b3a764000034101561078a5760405162461bcd60e51b815260040161075990611c1c565b6040513481526001600160a01b0382169033907f510b11bb3f3c799b11307c01ab7db0d335683ef5b2da98f7697de744f465eacc9060200160405180910390a350565b600080516020611ec2833981519152805460029190600160401b900460ff16806108055750805467ffffffffffffffff808416911610155b156108235760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff191667ffffffffffffffff831617600160401b17815560408051808201825260078152665374616b696e6760c81b602080830191909152825180840190935260018352603160f81b9083015261088491610f2d565b805460ff60401b1916815560405167ffffffffffffffff831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050565b6108d8610e94565b6108e26000610f43565b565b60005460ff16158061090e57506001600160a01b03811660009081526001602052604090205460ff165b6109555760405162461bcd60e51b815260206004820152601860248201527714dd185ada5b99ce881b9bdd08185b1b1bddd959081d985b60421b6044820152606401610759565b670de0b6b3a764000034101561097d5760405162461bcd60e51b815260040161075990611c1c565b806001600160a01b0316826001600160a01b03167f510b11bb3f3c799b11307c01ab7db0d335683ef5b2da98f7697de744f465eacc346040516109c291815260200190565b60405180910390a35050565b60006060808280808381600080516020611ea283398151915280549091501580156109fb57506001810154155b610a3f5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606401610759565b610a47610fb4565b610a4f611077565b60408051600080825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b600080516020611ec28339815191528054600160401b810460ff16159067ffffffffffffffff16600081158015610aae5750825b905060008267ffffffffffffffff166001148015610acb5750303b155b905081158015610ad9575080155b15610af75760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610b2157845460ff60401b1916600160401b1785555b61068f87610f1c565b60005460ff161580610b4b57503360009081526001602052604090205460ff165b610b8e5760405162461bcd60e51b815260206004820152601460248201527314dd185ada5b99ce881b9bdd08185b1b1bddd95960621b6044820152606401610759565b68056bc75e2d63100000341015610bb75760405162461bcd60e51b815260040161075990611c1c565b610bc182826110b6565b610c075760405162461bcd60e51b81526020600482015260176024820152765374616b696e673a20696e76616c6964207075626b657960481b6044820152606401610759565b336001600160a01b03167fc7abef7b73f049da6a9bc2349ba5066a39e316eabc9f671b6f9406aa9490a453838334604051610c4493929190611c69565b60405180910390a25050565b610c58610e94565b6000805460ff191660011781556040517f8a943acd5f4e6d3df7565a4a08a93f6b04cc31bb6c01ca4aef7abd6baf455ec39190a1565b610c96610e94565b6000805460ff191681556040517f2d35c8d348a345fd7b3b03b7cfcf7ad0b60c2d46742d5ca536342e4185becb079190a1565b60005460ff161580610cea57503360009081526001602052604090205460ff165b610d2d5760405162461bcd60e51b815260206004820152601460248201527314dd185ada5b99ce881b9bdd08185b1b1bddd95960621b6044820152606401610759565b68056bc75e2d63100000341015610d565760405162461bcd60e51b815260040161075990611c1c565b610d60848461120a565b610da65760405162461bcd60e51b81526020600482015260176024820152765374616b696e673a20696e76616c6964207075626b657960481b6044820152606401610759565b610db284848484611220565b610dfe5760405162461bcd60e51b815260206004820152601a60248201527f5374616b696e673a20696e76616c6964207369676e61747572650000000000006044820152606401610759565b6000610e0a85856112d8565b9050336001600160a01b03167fc7abef7b73f049da6a9bc2349ba5066a39e316eabc9f671b6f9406aa9490a4538234604051610e47929190611ca2565b60405180910390a25050505050565b610e5e610e94565b6001600160a01b038116610e8857604051631e4fbdf760e01b815260006004820152602401610759565b610e9181610f43565b50565b33610ec67f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146108e25760405163118cdaa760e01b8152336004820152602401610759565b60006104cb610efc611325565b8360405161190160f01b8152600281019290925260228201526042902090565b610f24611334565b610e918161136b565b610f35611334565b610f3f8282611373565b5050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1028054606091600080516020611ea283398151915291610ff390611cc4565b80601f016020809104026020016040519081016040528092919081815260200182805461101f90611cc4565b801561106c5780601f106110415761010080835404028352916020019161106c565b820191906000526020600020905b81548152906001019060200180831161104f57829003601f168201915b505050505091505090565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1038054606091600080516020611ea283398151915291610ff390611cc4565b6000602182146111085760405162461bcd60e51b815260206004820152601e60248201527f5374616b696e673a20696e76616c6964207075626b6579206c656e67746800006044820152606401610759565b8282600081811061111b5761111b611c06565b9050013560f81c60f81b6001600160f81b031916600260f81b148061116957508282600081811061114e5761114e611c06565b9050013560f81c60f81b6001600160f81b031916600360f81b145b6111b55760405162461bcd60e51b815260206004820152601e60248201527f5374616b696e673a20696e76616c6964207075626b65792070726566697800006044820152606401610759565b600183013560006111ea858583816111cf576111cf611c06565b919091013560f81c905083600060076401000003d0196113d4565b90506112018282600060076401000003d019611506565b95945050505050565b60006104c883838360076401000003d019611506565b604080517fc9a51567e61a6d1a243a60e57bf4560e7e543694b79349ce2cba3a14fe21b0426020820152908101859052606081018490526000908190611268906080016104ad565b905060006112ac8286868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506115bf92505050565b5050905060006112bc888861160c565b6001600160a01b03928316921691909114979650505050505050565b606060006112ea600184166002611d14565b6040805160f89290921b6001600160f81b03191660208301526021808301969096528051808303909601865260419091019052509192915050565b600061132f611642565b905090565b600080516020611ec283398151915254600160401b900460ff166108e257604051631afcd79f60e31b815260040160405180910390fd5b610e5e611334565b61137b611334565b600080516020611ea28339815191527fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1026113b58482611d7d565b50600381016113c48382611d7d565b5060008082556001909101555050565b60008560ff16600214806113eb57508560ff166003145b6114515760405162461bcd60e51b815260206004820152603160248201527f456c6c697074696343757276653a696e6e76616c696420636f6d7072657373656044820152700c8408a8640e0ded2dce840e0e4caccd2f607b1b6064820152608401610759565b6000828061146157611461611e3d565b838061146f5761146f611e3d565b85858061147e5761147e611e3d565b888a0908848061149057611490611e3d565b858061149e5761149e611e3d565b898a0989090890506114c78160046114b7866001611e53565b6114c19190611e66565b856116b6565b9050600060026114da60ff8a1684611e53565b6114e49190611e7a565b156114f8576114f38285611e8e565b6114fa565b815b98975050505050505050565b60008515806115155750818610155b8061151e575084155b806115295750818510155b1561153657506000611201565b6000828061154657611546611e3d565b86870990506000838061155b5761155b611e3d565b88858061156a5761156a611e3d565b8a8b09099050851561159a57838061158457611584611e3d565b848061159257611592611e3d565b878a09820890505b84156115b45783806115ae576115ae611e3d565b85820890505b149695505050505050565b600080600083516041036115f95760208401516040850151606086015160001a6115eb8882858561178f565b955095509550505050611605565b50508151600091506002905b9250925092565b60408051818152606081018252600091829190602082018180368337505050602081019485526040810193909352505051902090565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61166d61185e565b6116756118c8565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6000816000036117085760405162461bcd60e51b815260206004820152601e60248201527f456c6c697074696343757276653a206d6f64756c7573206973207a65726f00006044820152606401610759565b8360000361171857506000611788565b8260000361172857506001611788565b6001600160ff1b5b801561178457838186161515870a85848509099150836002820486161515870a85848509099150836004820486161515870a85848509099150836008820486161515870a8584850909915060109004611730565b5090505b9392505050565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156117ca5750600091506003905082611854565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561181e573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661184a57506000925060019150829050611854565b9250600091508190505b9450945094915050565b6000600080516020611ea283398151915281611878610fb4565b80519091501561189057805160209091012092915050565b8154801561189f579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b6000600080516020611ea2833981519152816118e2611077565b8051909150156118fa57805160209091012092915050565b6001820154801561189f579392505050565b6000806020838503121561191f57600080fd5b823567ffffffffffffffff8082111561193757600080fd5b818501915085601f83011261194b57600080fd5b81358181111561195a57600080fd5b8660208260051b850101111561196f57600080fd5b60209290920196919550909350505050565b6000806040838503121561199457600080fd5b50508035926020909101359150565b80356001600160a01b03811681146119ba57600080fd5b919050565b600080604083850312156119d257600080fd5b6119db836119a3565b9150602083013580151581146119f057600080fd5b809150509250929050565b600060208284031215611a0d57600080fd5b6104c8826119a3565b60008060408385031215611a2957600080fd5b611a32836119a3565b9150611a40602084016119a3565b90509250929050565b6000815180845260005b81811015611a6f57602081850181015186830182015201611a53565b506000602082860101526020601f19601f83011685010191505092915050565b60ff60f81b881681526000602060e06020840152611ab060e084018a611a49565b8381036040850152611ac2818a611a49565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015611b1657835183529284019291840191600101611afa565b50909c9b505050505050505050505050565b60008083601f840112611b3a57600080fd5b50813567ffffffffffffffff811115611b5257600080fd5b602083019150836020828501011115611b6a57600080fd5b9250929050565b60008060208385031215611b8457600080fd5b823567ffffffffffffffff811115611b9b57600080fd5b611ba785828601611b28565b90969095509350505050565b60008060008060608587031215611bc957600080fd5b8435935060208501359250604085013567ffffffffffffffff811115611bee57600080fd5b611bfa87828801611b28565b95989497509550505050565b634e487b7160e01b600052603260045260246000fd5b6020808252601d908201527f5374616b696e673a20696e73756666696369656e74206465706f736974000000604082015260600190565b634e487b7160e01b600052604160045260246000fd5b604081528260408201528284606083013760006060848301015260006060601f19601f8601168301019050826020830152949350505050565b604081526000611cb56040830185611a49565b90508260208301529392505050565b600181811c90821680611cd857607f821691505b602082108103611cf857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60ff81811683821601908111156104cb576104cb611cfe565b601f821115610466576000816000526020600020601f850160051c81016020861015611d565750805b601f850160051c820191505b81811015611d7557828155600101611d62565b505050505050565b815167ffffffffffffffff811115611d9757611d97611c53565b611dab81611da58454611cc4565b84611d2d565b602080601f831160018114611de05760008415611dc85750858301515b600019600386901b1c1916600185901b178555611d75565b600085815260208120601f198616915b82811015611e0f57888601518255948401946001909101908401611df0565b5085821015611e2d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601260045260246000fd5b808201808211156104cb576104cb611cfe565b600082611e7557611e75611e3d565b500490565b600082611e8957611e89611e3d565b500690565b818103818111156104cb576104cb611cfe56fea16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a264697066735822122057ddea58705967f95dd719b1291a1c26f48f1f5098c7783101c5cdc9cb35c6d664736f6c63430008180033", "nonce": "0x0", "storage": { "0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00": "0x000000000000000000000000000000000000000000000000ffffffffffffffff" diff --git a/contracts/bindings/admin.go b/contracts/bindings/admin.go index 2c457588f..5ef7853c0 100644 --- a/contracts/bindings/admin.go +++ b/contracts/bindings/admin.go @@ -32,7 +32,7 @@ var ( // AdminMetaData contains all meta data concerning the Admin contract. var AdminMetaData = &bind.MetaData{ ABI: "[{\"type\":\"function\",\"name\":\"IS_SCRIPT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pauseBridge\",\"inputs\":[{\"name\":\"admin\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"bridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"action\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pausePortal\",\"inputs\":[{\"name\":\"admin\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"portal\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseXCall\",\"inputs\":[{\"name\":\"admin\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"portal\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseXCallTo\",\"inputs\":[{\"name\":\"admin\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"portal\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseXSubmit\",\"inputs\":[{\"name\":\"admin\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"portal\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseXSubmitFrom\",\"inputs\":[{\"name\":\"admin\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"portal\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPortalFeeOracleV2\",\"inputs\":[{\"name\":\"admin\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"portal\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"newFeeOracle\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpauseBridge\",\"inputs\":[{\"name\":\"admin\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"bridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"action\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpausePortal\",\"inputs\":[{\"name\":\"admin\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"portal\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpauseXCall\",\"inputs\":[{\"name\":\"admin\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"portal\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpauseXCallTo\",\"inputs\":[{\"name\":\"admin\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"portal\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpauseXSubmit\",\"inputs\":[{\"name\":\"admin\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"portal\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpauseXSubmitFrom\",\"inputs\":[{\"name\":\"admin\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"portal\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeBridgeL1\",\"inputs\":[{\"name\":\"admin\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"deployer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"proxy\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeBridgeNative\",\"inputs\":[{\"name\":\"admin\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"deployer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeFeeOracleV1\",\"inputs\":[{\"name\":\"admin\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"deployer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"proxy\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeFeeOracleV2\",\"inputs\":[{\"name\":\"admin\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"deployer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"proxy\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeGasPump\",\"inputs\":[{\"name\":\"admin\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"deployer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"proxy\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeGasStation\",\"inputs\":[{\"name\":\"admin\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"deployer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"proxy\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradePortal\",\"inputs\":[{\"name\":\"admin\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"deployer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"portal\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradePortalRegistry\",\"inputs\":[{\"name\":\"admin\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"deployer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeSlashing\",\"inputs\":[{\"name\":\"admin\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"deployer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeStaking\",\"inputs\":[{\"name\":\"admin\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"deployer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"}]", - Bin: "0x6080604052600c805462ff00ff19166201000117905534801561002157600080fd5b506202294b80620000336000396000f3fe60806040523480156200001157600080fd5b5060043610620001755760003560e01c80639452e25f11620000d3578063c7a275ae1162000086578063c7a275ae146200031a578063cec93a7a1462000331578063cfbf9af71462000348578063d3919d63146200035f578063d9ce4ea91462000376578063f8ccbf47146200038d57600080fd5b80639452e25f1462000290578063a71b82f314620002a7578063ad16106214620002be578063b90b3ffb14620002d5578063becbbd8414620002ec578063c206ac67146200030357600080fd5b80635a92ef23116200012c5780635a92ef2314620002065780635dcb0792146200021d578063626812e314620002345780636e7a9833146200024b5780637924b9b314620002625780637be88400146200027957600080fd5b806308de3fd4146200017a5780631a2b9c80146200019357806323c325eb14620001aa5780633e1f7dbc14620001c15780634bbad78a14620001d85780634be3be6214620001ef575b600080fd5b620001916200018b36600462003aef565b620003b5565b005b62000191620001a436600462003aef565b620004f3565b62000191620001bb36600462003b8c565b62000595565b62000191620001d236600462003c11565b620006ad565b62000191620001e936600462003aef565b620013f5565b620001916200020036600462003c7d565b62001497565b620001916200021736600462003c11565b62001951565b620001916200022e36600462003cc4565b62001a7e565b620001916200024536600462003c11565b62001bab565b620001916200025c36600462003b8c565b62001f80565b620001916200027336600462003c11565b62001ffa565b620001916200028a36600462003b8c565b6200211e565b62000191620002a136600462003b8c565b62002198565b62000191620002b836600462003d02565b62002212565b62000191620002cf36600462003b8c565b62002433565b62000191620002e636600462003cc4565b620024ad565b62000191620002fd36600462003cc4565b62002555565b620001916200031436600462003aef565b620025fd565b620001916200032b36600462003cc4565b6200269f565b620001916200034236600462003d02565b62002747565b620001916200035936600462003cc4565b62002968565b620001916200037036600462003b8c565b62002a10565b620001916200038736600462003cc4565b6200351e565b600c54620003a19062010000900460ff1681565b604051901515815260200160405180910390f35b604051637fec2a8d60e01b81526001600160a01b03841660048201528390600080516020620228d683398151915290637fec2a8d90602401600060405180830381600087803b1580156200040857600080fd5b505af11580156200041d573d6000803e3d6000fd5b505060405163d533b44560e01b81526001600160401b03851660048201526001600160a01b038616925063d533b44591506024015b600060405180830381600087803b1580156200046d57600080fd5b505af115801562000482573d6000803e3d6000fd5b50505050600080516020620228f683398151915260001c6001600160a01b03166376eadd366040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620004d457600080fd5b505af1158015620004e9573d6000803e3d6000fd5b5050505050505050565b604051637fec2a8d60e01b81526001600160a01b03841660048201528390600080516020620228d683398151915290637fec2a8d90602401600060405180830381600087803b1580156200054657600080fd5b505af11580156200055b573d6000803e3d6000fd5b50506040516315fd043360e31b81526001600160401b03851660048201526001600160a01b038616925063afe82198915060240162000452565b604051637fec2a8d60e01b81526001600160a01b0385166004820152600080516020620228d683398151915290637fec2a8d90602401600060405180830381600087803b158015620005e657600080fd5b505af1158015620005fb573d6000803e3d6000fd5b5050505060006040516200060f90620039fc565b604051809103906000f0801580156200062c573d6000803e3d6000fd5b509050600080516020620228f683398151915260001c6001600160a01b03166376eadd366040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200067d57600080fd5b505af115801562000692573d6000803e3d6000fd5b50505050620006a58685838686620035c6565b505050505050565b6000600262048789608a1b0190506000816001600160a01b031663241b71bb836001600160a01b031663a10ac97a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200070b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000731919062003d48565b6040518263ffffffff1660e01b81526004016200075091815260200190565b602060405180830381865afa1580156200076e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000794919062003d62565b90506000826001600160a01b031663241b71bb846001600160a01b03166309839a936040518163ffffffff1660e01b8152600401602060405180830381865afa158015620007e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200080c919062003d48565b6040518263ffffffff1660e01b81526004016200082b91815260200190565b602060405180830381865afa15801562000849573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200086f919062003d62565b90506000836001600160a01b031663241b71bb856001600160a01b03166325d70f786040518163ffffffff1660e01b8152600401602060405180830381865afa158015620008c1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008e7919062003d48565b6040518263ffffffff1660e01b81526004016200090691815260200190565b602060405180830381865afa15801562000924573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200094a919062003d62565b90506000846001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200098d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620009b3919062003d8d565b90506000856001600160a01b03166339acf9f16040518163ffffffff1660e01b8152600401602060405180830381865afa158015620009f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a1c919062003d8d565b90506000866001600160a01b031663969b53da6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a5f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a85919062003d8d565b90506000876001600160a01b03166312622e5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000ac8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000aee919062003dad565b90506000886001600160a01b03166323b051d96040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000b31573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b57919062003d48565b604051637fec2a8d60e01b81526001600160a01b038e166004820152909150600080516020620228d683398151915290637fec2a8d90602401600060405180830381600087803b15801562000bab57600080fd5b505af115801562000bc0573d6000803e3d6000fd5b50505050600060405162000bd49062003a0a565b604051809103906000f08015801562000bf1573d6000803e3d6000fd5b509050600080516020620228f683398151915260001c6001600160a01b03166376eadd366040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000c4257600080fd5b505af115801562000c57573d6000803e3d6000fd5b5050505062000c738e600262048789608a1b01838f8f620035c6565b856001600160a01b03168a6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000cbc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ce2919062003d8d565b6001600160a01b03161462000d145760405162461bcd60e51b815260040162000d0b9062003dcd565b60405180910390fd5b826001600160401b03168a6001600160a01b03166312622e5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000d5d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000d83919062003dad565b6001600160401b03161462000dcf5760405162461bcd60e51b81526020600482015260116024820152701b0c50da185a5b92590818da185b99d959607a1b604482015260640162000d0b565b846001600160a01b03168a6001600160a01b03166339acf9f16040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000e18573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e3e919062003d8d565b6001600160a01b03161462000e855760405162461bcd60e51b815260206004820152600c60248201526b1bdb5b9a4818da185b99d95960a21b604482015260640162000d0b565b818a6001600160a01b03166332c8bb776040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000ec5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000eeb919062003d48565b1462000f2f5760405162461bcd60e51b81526020600482015260126024820152711b0c51195c1bdcda5d1cc818da185b99d95960721b604482015260640162000d0b565b836001600160a01b03168a6001600160a01b031663969b53da6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000f78573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000f9e919062003d8d565b6001600160a01b03161462000fe95760405162461bcd60e51b815260206004820152601060248201526f1b0c509c9a5919d94818da185b99d95960821b604482015260640162000d0b565b8815158a6001600160a01b031663241b71bb8c6001600160a01b031663a10ac97a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200103a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001060919062003d48565b6040518263ffffffff1660e01b81526004016200107f91815260200190565b602060405180830381865afa1580156200109d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010c3919062003d62565b1515146200110f5760405162461bcd60e51b8152602060048201526018602482015277185b1b081c185d5cd959081cdd185d194818da185b99d95960421b604482015260640162000d0b565b8715158a6001600160a01b031663241b71bb8c6001600160a01b03166309839a936040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001160573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001186919062003d48565b6040518263ffffffff1660e01b8152600401620011a591815260200190565b602060405180830381865afa158015620011c3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011e9919062003d62565b1515146200123a5760405162461bcd60e51b815260206004820152601b60248201527f62726964676520706175736564207374617465206368616e6765640000000000604482015260640162000d0b565b8615158a6001600160a01b031663241b71bb8c6001600160a01b03166325d70f786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200128b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620012b1919062003d48565b6040518263ffffffff1660e01b8152600401620012d091815260200190565b602060405180830381865afa158015620012ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001314919062003d62565b151514620013655760405162461bcd60e51b815260206004820152601d60248201527f776974686472617720706175736564207374617465206368616e676564000000604482015260640162000d0b565b604051620013739062003a18565b604051809103906000f08015801562001390573d6000803e3d6000fd5b506001600160a01b031663c04062266040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620013cc57600080fd5b505af1158015620013e1573d6000803e3d6000fd5b505050505050505050505050505050505050565b604051637fec2a8d60e01b81526001600160a01b03841660048201528390600080516020620228d683398151915290637fec2a8d90602401600060405180830381600087803b1580156200144857600080fd5b505af11580156200145d573d6000803e3d6000fd5b505060405163185f372d60e31b81526001600160401b03851660048201526001600160a01b038616925063c2f9b968915060240162000452565b6000826001600160a01b031663500b19e76040518163ffffffff1660e01b8152600401602060405180830381865afa158015620014d8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620014fe919062003d8d565b9050816001600160a01b0316816001600160a01b031603620015635760405162461bcd60e51b815260206004820152601760248201527f6e657720666565206f7261636c65207265717569726564000000000000000000604482015260640162000d0b565b604051637fec2a8d60e01b81526001600160a01b0385166004820152600080516020620228d683398151915290637fec2a8d90602401600060405180830381600087803b158015620015b457600080fd5b505af1158015620015c9573d6000803e3d6000fd5b5050604051635454c4b160e11b81526001600160a01b0385811660048301528616925063a8a989629150602401600060405180830381600087803b1580156200161157600080fd5b505af115801562001626573d6000803e3d6000fd5b50505050600080516020620228f683398151915260001c6001600160a01b03166376eadd366040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200167857600080fd5b505af11580156200168d573d6000803e3d6000fd5b50505050816001600160a01b0316836001600160a01b031663500b19e76040518163ffffffff1660e01b8152600401602060405180830381865afa158015620016da573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001700919062003d8d565b6001600160a01b031614620017585760405162461bcd60e51b815260206004820152601860248201527f706f7274616c2061737369676e6d656e74206661696c65640000000000000000604482015260640162000d0b565b60006001600160a01b0316826001600160a01b031663481c6a756040518163ffffffff1660e01b8152600401602060405180830381865afa158015620017a2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017c8919062003d8d565b6001600160a01b031603620018205760405162461bcd60e51b815260206004820152601a60248201527f666565206f7261636c65206e6f7420696e697469616c697a6564000000000000604482015260640162000d0b565b816001600160a01b03166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200185f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001885919062003dad565b6001600160401b0316600214620018df5760405162461bcd60e51b815260206004820152601a60248201527f666565206f7261636c65206e6f74204665654f7261636c655632000000000000604482015260640162000d0b565b604051620018ed9062003a26565b604051809103906000f0801580156200190a573d6000803e3d6000fd5b5060405163148aedc160e21b81526001600160a01b038481166004830152919091169063522bb70490602401600060405180830381600087803b158015620004d457600080fd5b604051637fec2a8d60e01b81526001600160a01b0384166004820152600080516020620228d683398151915290637fec2a8d90602401600060405180830381600087803b158015620019a257600080fd5b505af1158015620019b7573d6000803e3d6000fd5b505050506000604051620019cb9062003a34565b604051809103906000f080158015620019e8573d6000803e3d6000fd5b509050600080516020620228f683398151915260001c6001600160a01b03166376eadd366040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562001a3957600080fd5b505af115801562001a4e573d6000803e3d6000fd5b5050505062001a778573cccccc00000000000000000000000000000000028386866000620035d2565b5050505050565b604051637fec2a8d60e01b81526001600160a01b03831660048201528290600080516020620228d683398151915290637fec2a8d90602401600060405180830381600087803b15801562001ad157600080fd5b505af115801562001ae6573d6000803e3d6000fd5b50505050816001600160a01b03166383d0cbd96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562001b2657600080fd5b505af115801562001b3b573d6000803e3d6000fd5b50505050600080516020620228f683398151915260001c6001600160a01b03166376eadd366040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562001b8d57600080fd5b505af115801562001ba2573d6000803e3d6000fd5b50505050505050565b6000600162333333608a1b0190506000816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001bfa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c20919062003d8d565b90506000826001600160a01b031663d146fd1b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001c63573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c89919062003d62565b604051637fec2a8d60e01b81526001600160a01b0388166004820152909150600080516020620228d683398151915290637fec2a8d90602401600060405180830381600087803b15801562001cdd57600080fd5b505af115801562001cf2573d6000803e3d6000fd5b50505050600060405162001d069062003a42565b604051809103906000f08015801562001d23573d6000803e3d6000fd5b509050600080516020620228f683398151915260001c6001600160a01b03166376eadd366040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562001d7457600080fd5b505af115801562001d89573d6000803e3d6000fd5b5050505062001da588600162333333608a1b01838989620035c6565b826001600160a01b0316846001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001dee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001e14919062003d8d565b6001600160a01b03161462001e3d5760405162461bcd60e51b815260040162000d0b9062003dcd565b811515846001600160a01b031663d146fd1b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001e7f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ea5919062003d62565b15151462001ef65760405162461bcd60e51b815260206004820152601a60248201527f6973416c6c6f776c697374456e61626c6564206368616e676564000000000000604482015260640162000d0b565b60405162001f049062003a50565b604051809103906000f08015801562001f21573d6000803e3d6000fd5b506001600160a01b031663c04062266040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562001f5d57600080fd5b505af115801562001f72573d6000803e3d6000fd5b505050505050505050505050565b604051637fec2a8d60e01b81526001600160a01b0385166004820152600080516020620228d683398151915290637fec2a8d90602401600060405180830381600087803b15801562001fd157600080fd5b505af115801562001fe6573d6000803e3d6000fd5b5050505060006040516200060f9062003a5e565b604051637fec2a8d60e01b81526001600160a01b0384166004820152600080516020620228d683398151915290637fec2a8d90602401600060405180830381600087803b1580156200204b57600080fd5b505af115801562002060573d6000803e3d6000fd5b505050506000604051620020749062003a6c565b604051809103906000f08015801562002091573d6000803e3d6000fd5b509050600080516020620228f683398151915260001c6001600160a01b03166376eadd366040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620020e257600080fd5b505af1158015620020f7573d6000803e3d6000fd5b5050505062001a778573121e240000000000000000000000000000000001838686620035c6565b604051637fec2a8d60e01b81526001600160a01b0385166004820152600080516020620228d683398151915290637fec2a8d90602401600060405180830381600087803b1580156200216f57600080fd5b505af115801562002184573d6000803e3d6000fd5b5050505060006040516200060f9062003a7a565b604051637fec2a8d60e01b81526001600160a01b0385166004820152600080516020620228d683398151915290637fec2a8d90602401600060405180830381600087803b158015620021e957600080fd5b505af1158015620021fe573d6000803e3d6000fd5b5050505060006040516200060f9062003a88565b6000829050806001600160a01b03166325d70f786040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002256573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200227c919062003d48565b821480620022ed5750806001600160a01b03166309839a936040518163ffffffff1660e01b8152600401602060405180830381865afa158015620022c4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620022ea919062003d48565b82145b806200235c5750806001600160a01b031663a10ac97a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002333573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002359919062003d48565b82145b6200239b5760405162461bcd60e51b815260206004820152600e60248201526d34b73b30b634b21030b1ba34b7b760911b604482015260640162000d0b565b604051637fec2a8d60e01b81526001600160a01b0385166004820152600080516020620228d683398151915290637fec2a8d90602401600060405180830381600087803b158015620023ec57600080fd5b505af115801562002401573d6000803e3d6000fd5b5050604051632f4dae9f60e01b8152600481018590526001600160a01b0384169250632f4dae9f915060240162000452565b604051637fec2a8d60e01b81526001600160a01b0385166004820152600080516020620228d683398151915290637fec2a8d90602401600060405180830381600087803b1580156200248457600080fd5b505af115801562002499573d6000803e3d6000fd5b5050505060006040516200060f9062003a96565b604051637fec2a8d60e01b81526001600160a01b03831660048201528290600080516020620228d683398151915290637fec2a8d90602401600060405180830381600087803b1580156200250057600080fd5b505af115801562002515573d6000803e3d6000fd5b50505050816001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562001b2657600080fd5b604051637fec2a8d60e01b81526001600160a01b03831660048201528290600080516020620228d683398151915290637fec2a8d90602401600060405180830381600087803b158015620025a857600080fd5b505af1158015620025bd573d6000803e3d6000fd5b50505050816001600160a01b03166354d26bba6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562001b2657600080fd5b604051637fec2a8d60e01b81526001600160a01b03841660048201528390600080516020620228d683398151915290637fec2a8d90602401600060405180830381600087803b1580156200265057600080fd5b505af115801562002665573d6000803e3d6000fd5b50506040516310a5a7f760e01b81526001600160401b03851660048201526001600160a01b03861692506310a5a7f7915060240162000452565b604051637fec2a8d60e01b81526001600160a01b03831660048201528290600080516020620228d683398151915290637fec2a8d90602401600060405180830381600087803b158015620026f257600080fd5b505af115801562002707573d6000803e3d6000fd5b50505050816001600160a01b03166323dbce506040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562001b2657600080fd5b6000829050806001600160a01b03166325d70f786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200278b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620027b1919062003d48565b821480620028225750806001600160a01b03166309839a936040518163ffffffff1660e01b8152600401602060405180830381865afa158015620027f9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200281f919062003d48565b82145b80620028915750806001600160a01b031663a10ac97a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002868573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200288e919062003d48565b82145b620028d05760405162461bcd60e51b815260206004820152600e60248201526d34b73b30b634b21030b1ba34b7b760911b604482015260640162000d0b565b604051637fec2a8d60e01b81526001600160a01b0385166004820152600080516020620228d683398151915290637fec2a8d90602401600060405180830381600087803b1580156200292157600080fd5b505af115801562002936573d6000803e3d6000fd5b50506040516376ab298d60e11b8152600481018590526001600160a01b038416925063ed56531a915060240162000452565b604051637fec2a8d60e01b81526001600160a01b03831660048201528290600080516020620228d683398151915290637fec2a8d90602401600060405180830381600087803b158015620029bb57600080fd5b505af1158015620029d0573d6000803e3d6000fd5b50505050816001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562001b2657600080fd5b60008390506000816001600160a01b031663241b71bb836001600160a01b031663a10ac97a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002a65573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002a8b919062003d48565b6040518263ffffffff1660e01b815260040162002aaa91815260200190565b602060405180830381865afa15801562002ac8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002aee919062003d62565b90506000826001600160a01b031663241b71bb846001600160a01b03166309839a936040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002b40573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002b66919062003d48565b6040518263ffffffff1660e01b815260040162002b8591815260200190565b602060405180830381865afa15801562002ba3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002bc9919062003d62565b90506000836001600160a01b031663241b71bb856001600160a01b03166325d70f786040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002c1b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002c41919062003d48565b6040518263ffffffff1660e01b815260040162002c6091815260200190565b602060405180830381865afa15801562002c7e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002ca4919062003d62565b90506000846001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002ce7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002d0d919062003d8d565b90506000856001600160a01b031663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002d50573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002d76919062003d8d565b90506000866001600160a01b03166339acf9f16040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002db9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002ddf919062003d8d565b604051637fec2a8d60e01b81526001600160a01b038d166004820152909150600080516020620228d683398151915290637fec2a8d90602401600060405180830381600087803b15801562002e3357600080fd5b505af115801562002e48573d6000803e3d6000fd5b5050505060008260405162002e5d9062003aa4565b6001600160a01b039091168152602001604051809103906000f08015801562002e8a573d6000803e3d6000fd5b509050600080516020620228f683398151915260001c6001600160a01b03166376eadd366040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562002edb57600080fd5b505af115801562002ef0573d6000803e3d6000fd5b5050505062002f038d8c838d8d620035c6565b836001600160a01b0316886001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002f4c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002f72919062003d8d565b6001600160a01b03161462002f9b5760405162461bcd60e51b815260040162000d0b9062003dcd565b826001600160a01b0316886001600160a01b031663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002fe4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200300a919062003d8d565b6001600160a01b031614620030525760405162461bcd60e51b815260206004820152600d60248201526c1d1bdad95b8818da185b99d959609a1b604482015260640162000d0b565b816001600160a01b0316886001600160a01b03166339acf9f16040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200309b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620030c1919062003d8d565b6001600160a01b031614620031085760405162461bcd60e51b815260206004820152600c60248201526b1bdb5b9a4818da185b99d95960a21b604482015260640162000d0b565b861515886001600160a01b031663241b71bb8a6001600160a01b031663a10ac97a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562003159573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200317f919062003d48565b6040518263ffffffff1660e01b81526004016200319e91815260200190565b602060405180830381865afa158015620031bc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620031e2919062003d62565b1515146200322e5760405162461bcd60e51b8152602060048201526018602482015277185b1b081c185d5cd959081cdd185d194818da185b99d95960421b604482015260640162000d0b565b851515886001600160a01b031663241b71bb8a6001600160a01b03166309839a936040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200327f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620032a5919062003d48565b6040518263ffffffff1660e01b8152600401620032c491815260200190565b602060405180830381865afa158015620032e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003308919062003d62565b151514620033595760405162461bcd60e51b815260206004820152601b60248201527f62726964676520706175736564207374617465206368616e6765640000000000604482015260640162000d0b565b841515886001600160a01b031663241b71bb8a6001600160a01b03166325d70f786040518163ffffffff1660e01b8152600401602060405180830381865afa158015620033aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620033d0919062003d48565b6040518263ffffffff1660e01b8152600401620033ef91815260200190565b602060405180830381865afa1580156200340d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003433919062003d62565b151514620034845760405162461bcd60e51b815260206004820152601d60248201527f776974686472617720706175736564207374617465206368616e676564000000604482015260640162000d0b565b604051620034929062003ab2565b604051809103906000f080158015620034af573d6000803e3d6000fd5b5060405163148aedc160e21b81526001600160a01b038d81166004830152919091169063522bb70490602401600060405180830381600087803b158015620034f657600080fd5b505af11580156200350b573d6000803e3d6000fd5b5050505050505050505050505050505050565b604051637fec2a8d60e01b81526001600160a01b03831660048201528290600080516020620228d683398151915290637fec2a8d90602401600060405180830381600087803b1580156200357157600080fd5b505af115801562003586573d6000803e3d6000fd5b50505050816001600160a01b031663c3d8ad676040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562001b2657600080fd5b62001a77858585858560015b6000620035df86620037d9565b604051637fec2a8d60e01b81526001600160a01b0389166004820152909150600080516020620228d683398151915290637fec2a8d90602401600060405180830381600087803b1580156200363357600080fd5b505af115801562003648573d6000803e3d6000fd5b5050604051639623609d60e01b81526001600160a01b0384169250639623609d91506200368090899089908990899060040162003df4565b600060405180830381600087803b1580156200369b57600080fd5b505af1158015620036b0573d6000803e3d6000fd5b50505050600080516020620228f683398151915260001c6001600160a01b03166376eadd366040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200370257600080fd5b505af115801562003717573d6000803e3d6000fd5b5050505081156200377b576200372d8562003883565b6200377b5760405162461bcd60e51b815260206004820152601960248201527f696e697469616c697a657273206e6f742064697361626c656400000000000000604482015260640162000d0b565b846001600160a01b03166200379087620038a8565b6001600160a01b03161462001ba25760405162461bcd60e51b815260206004820152600e60248201526d1d5c19dc9859194819985a5b195960921b604482015260640162000d0b565b604051630667f9d760e41b81526001600160a01b03821660048201527fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61036024820152600090600080516020620228d68339815191529063667f9d70906044015b602060405180830381865afa15801562003857573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200387d919062003d48565b92915050565b60006001600160401b0362003898836200390d565b6001600160401b03161492915050565b604051630667f9d760e41b81526001600160a01b03821660048201527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6024820152600090600080516020620228d68339815191529063667f9d709060440162003839565b604051630667f9d760e41b81526001600160a01b03821660048201527ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0060248201526000908190600080516020620228d68339815191529063667f9d7090604401602060405180830381865afa1580156200398c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620039b2919062003d48565b90506001600160401b038111156200387d5760405162461bcd60e51b815260206004820152600c60248201526b696e697469616c697a696e6760a01b604482015260640162000d0b565b611f0c8062003e4183390190565b6117e88062005d4d83390190565b613f90806200753583390190565b611a30806200b4c583390190565b61017e806200cef583390190565b611f01806200d07383390190565b6125a9806200ef7483390190565b614ea9806201151d83390190565b61198280620163c683390190565b61195d8062017d4883390190565b6112dd80620196a583390190565b61112a806201a98283390190565b611659806201baac83390190565b6157d1806201d10583390190565b6001600160a01b038116811462003ad657600080fd5b50565b6001600160401b038116811462003ad657600080fd5b60008060006060848603121562003b0557600080fd5b833562003b128162003ac0565b9250602084013562003b248162003ac0565b9150604084013562003b368162003ad9565b809150509250925092565b60008083601f84011262003b5457600080fd5b5081356001600160401b0381111562003b6c57600080fd5b60208301915083602082850101111562003b8557600080fd5b9250929050565b60008060008060006080868803121562003ba557600080fd5b853562003bb28162003ac0565b9450602086013562003bc48162003ac0565b9350604086013562003bd68162003ac0565b925060608601356001600160401b0381111562003bf257600080fd5b62003c008882890162003b41565b969995985093965092949392505050565b6000806000806060858703121562003c2857600080fd5b843562003c358162003ac0565b9350602085013562003c478162003ac0565b925060408501356001600160401b0381111562003c6357600080fd5b62003c718782880162003b41565b95989497509550505050565b60008060006060848603121562003c9357600080fd5b833562003ca08162003ac0565b9250602084013562003cb28162003ac0565b9150604084013562003b368162003ac0565b6000806040838503121562003cd857600080fd5b823562003ce58162003ac0565b9150602083013562003cf78162003ac0565b809150509250929050565b60008060006060848603121562003d1857600080fd5b833562003d258162003ac0565b9250602084013562003d378162003ac0565b929592945050506040919091013590565b60006020828403121562003d5b57600080fd5b5051919050565b60006020828403121562003d7557600080fd5b8151801515811462003d8657600080fd5b9392505050565b60006020828403121562003da057600080fd5b815162003d868162003ac0565b60006020828403121562003dc057600080fd5b815162003d868162003ad9565b6020808252600d908201526c1bdddb995c8818da185b99d959609a1b604082015260600190565b6001600160a01b0385811682528416602082015260606040820181905281018290526000828460808401376000608084840101526080601f19601f85011683010190509594505050505056fe608060405234801561001057600080fd5b5061001961001e565b6100d0565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161561006e5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100cd5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b611e2d806100df6000396000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c80639a5551c31161011a578063bfc71416116100ad578063db847a591161007c578063db847a59146106ea578063e21497b9146106fd578063e5737f6214610730578063f2fde38b14610743578063f364f6871461075657600080fd5b8063bfc71416146105cc578063d0ebdbe714610677578063d32b68ad1461068a578063db0018e8146106b757600080fd5b8063b17db68a116100e9578063b17db68a14610546578063b984cc0b14610566578063b9923e1c146105a6578063bc51bf37146105b957600080fd5b80639a5551c3146104c25780639c742ced146104f5578063a12f2c5814610508578063b0e21e8a1461051b57600080fd5b80635d3acee2116101925780638b7bfd70116101615780638b7bfd701461042d5780638da5cb5b146104755780638dd9523c146104a55780638f9d6ace146104b857600080fd5b80635d3acee2146103ca578063653c356e146103dd5780636b6dccfe14610412578063715018a61461042557600080fd5b8063481c6a75116101ce578063481c6a751461033457806350b815391461036657806354fd4d50146103b057806356bce459146103b757600080fd5b80632105b75514610200578063223aacf8146102155780632d4634a414610228578063415070af146102e9575b600080fd5b61021361020e36600461185c565b610769565b005b610213610223366004611914565b6107a9565b6102d36102363660046119f8565b6040805160a081018252600080825260208201819052918101829052606081018290526080810191909152506001600160401b03908116600090815260026020908152604091829020825160a081018452905461ffff8116825263ffffffff6201000082041692820192909252600160301b8204841692810192909252600160701b810483166060830152600160b01b9004909116608082015290565b6040516102e09190611a1a565b60405180910390f35b61031c6102f73660046119f8565b6001600160401b03908116600090815260036020526040902054600160701b90041690565b6040516001600160401b0390911681526020016102e0565b60005461034e90600160601b90046001600160a01b031681565b6040516001600160a01b0390911681526020016102e0565b61039b6103743660046119f8565b6001600160401b031660009081526002602052604090205462010000900463ffffffff1690565b60405163ffffffff90911681526020016102e0565b600261031c565b6102136103c5366004611a74565b6108ef565b6102136103d8366004611a74565b61092b565b61039b6103eb3660046119f8565b6001600160401b031660009081526003602052604090205462010000900463ffffffff1690565b610213610420366004611aa7565b610967565b61021361097b565b61046761043b3660046119f8565b6001600160401b031660009081526002602090815260408083205461ffff168352600190915290205490565b6040519081526020016102e0565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031661034e565b6104676104b3366004611ac2565b61098f565b610467620f424081565b61031c6104d03660046119f8565b6001600160401b03908116600090815260026020526040902054600160b01b90041690565b610213610503366004611b69565b610b1c565b610213610516366004611ba5565b610b58565b60005461052e906001600160601b031681565b6040516001600160601b0390911681526020016102e0565b610467610554366004611bcf565b60016020526000908152604090205481565b6105936105743660046119f8565b6001600160401b031660009081526002602052604090205461ffff1690565b60405161ffff90911681526020016102e0565b6102136105b4366004611a74565b610b94565b6102136105c7366004611a74565b610bd0565b6102d36105da3660046119f8565b6040805160a081018252600080825260208201819052918101829052606081018290526080810191909152506001600160401b03908116600090815260036020908152604091829020825160a081018452905461ffff8116825263ffffffff6201000082041692820192909252600160301b8204841692810192909252600160701b810483166060830152600160b01b9004909116608082015290565b610213610685366004611bea565b610c0c565b6105936106983660046119f8565b6001600160401b031660009081526003602052604090205461ffff1690565b61031c6106c53660046119f8565b6001600160401b03908116600090815260036020526040902054600160b01b90041690565b6102136106f836600461185c565b610c44565b61031c61070b3660046119f8565b6001600160401b03908116600090815260026020526040902054600160701b90041690565b61021361073e366004611b69565b610c80565b610213610751366004611bea565b610cbc565b610213610764366004611c05565b610cfc565b600054600160601b90046001600160a01b0316331461079b5760405163607e454560e11b815260040160405180910390fd5b6107a58282610d38565b5050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03166000811580156107ee5750825b90506000826001600160401b0316600114801561080a5750303b155b905081158015610818575080155b156108365760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561086057845460ff60401b1916600160401b1785555b6108698e610f27565b6108728d610f38565b61087b8c610f95565b6108858b8b610fe8565b61088f8989610d38565b61089987876111d2565b83156108df57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050505050505050565b600054600160601b90046001600160a01b031633146109215760405163607e454560e11b815260040160405180910390fd5b6107a58282611224565b600054600160601b90046001600160a01b0316331461095d5760405163607e454560e11b815260040160405180910390fd5b6107a582826112ee565b61096f6113b0565b61097881610f95565b50565b6109836113b0565b61098d600061140b565b565b6001600160401b0380851660009081526002602090815260408083208054600160b01b8104861685526003845282852061ffff82168652600190945291842054939490938592620f4240926109ec9291600160701b900416611c50565b6109f69190611c67565b825461ffff811660009081526001602052604081205492935091620f424091610a2f9190600160701b90046001600160401b0316611c50565b610a399190611c67565b905081600003610a5c57604051633532119760e11b815260040160405180910390fd5b80600003610a7d57604051633532119760e11b815260040160405180910390fd5b8254600090600160b01b81046001600160401b031690610aaa908a9062010000900463ffffffff16611c89565b610ab49190611c50565b9050610ac08282611c50565b85548490610adb908a9062010000900463ffffffff16611c9c565b6001600160401b0316610aee9190611c50565b600054610b0491906001600160601b0316611c89565b610b0e9190611c89565b9a9950505050505050505050565b600054600160601b90046001600160a01b03163314610b4e5760405163607e454560e11b815260040160405180910390fd5b6107a5828261147c565b600054600160601b90046001600160a01b03163314610b8a5760405163607e454560e11b815260040160405180910390fd5b6107a58282611513565b600054600160601b90046001600160a01b03163314610bc65760405163607e454560e11b815260040160405180910390fd5b6107a582826115a5565b600054600160601b90046001600160a01b03163314610c025760405163607e454560e11b815260040160405180910390fd5b6107a58282611667565b610c146113b0565b6001600160a01b038116610c3b5760405163d92e233d60e01b815260040160405180910390fd5b61097881610f38565b600054600160601b90046001600160a01b03163314610c765760405163607e454560e11b815260040160405180910390fd5b6107a58282610fe8565b600054600160601b90046001600160a01b03163314610cb25760405163607e454560e11b815260040160405180910390fd5b6107a58282611729565b610cc46113b0565b6001600160a01b038116610cf357604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6109788161140b565b600054600160601b90046001600160a01b03163314610d2e5760405163607e454560e11b815260040160405180910390fd5b6107a582826111d2565b60005b81811015610f22576000838383818110610d5757610d57611cc3565b905060a00201803603810190610d6d9190611d77565b805190915061ffff16600003610d96576040516350614df960e01b815260040160405180910390fd5b80604001516001600160401b0316600003610dc457604051630c26851b60e11b815260040160405180910390fd5b80606001516001600160401b0316600003610df257604051630e661aed60e41b815260040160405180910390fd5b80608001516001600160401b0316600003610e20576040516348cfc33560e11b815260040160405180910390fd5b604081810180516001600160401b0390811660009081526003602090815290849020855181548388015195516060808a01516080808c015161ffff90961665ffffffffffff1990951685176201000063ffffffff909b169a8b02176601000000000000600160b01b031916600160301b948a1694850267ffffffffffffffff60701b191617600160701b928a169283021767ffffffffffffffff60b01b1916600160b01b969099169586029890981790955588519283529482019690965295860194909452908401528201527fd143a0934cc5e5337dca3eb0afa1e7f86680796ca6f132bfe7e0828b7155bd409060a00160405180910390a150600101610d3b565b505050565b610f2f6117c0565b61097881611809565b600080546001600160601b0316600160601b6001600160a01b038416908102919091179091556040519081527f60a0f5b9f9e81e98216071b85826681c796256fe3d1354ecb675580fba64fa69906020015b60405180910390a150565b600080546bffffffffffffffffffffffff19166001600160601b0383169081179091556040519081527fd91752439e358587fc0828ed743df5939f16a918de501834bd954d03be15c95990602001610f8a565b60005b81811015610f2257600083838381811061100757611007611cc3565b905060a0020180360381019061101d9190611d77565b805190915061ffff16600003611046576040516350614df960e01b815260040160405180910390fd5b80604001516001600160401b031660000361107457604051633212217560e21b815260040160405180910390fd5b80606001516001600160401b03166000036110a257604051630e661aed60e41b815260040160405180910390fd5b80608001516001600160401b03166000036110d057604051630c26851b60e11b815260040160405180910390fd5b604081810180516001600160401b0390811660009081526002602090815290849020855181548388015195516060808a01516080808c015161ffff90961665ffffffffffff1990951685176201000063ffffffff909b169a8b02176601000000000000600160b01b031916600160301b948a1694850267ffffffffffffffff60701b191617600160701b928a169283021767ffffffffffffffff60b01b1916600160b01b969099169586029890981790955588519283529482019690965295860194909452908401528201527f600e7ff14e74285e17debda1fee2df93741c6518e12ba908ba4417c0610974a99060a00160405180910390a150600101610feb565b60005b81811015610f225760008383838181106111f1576111f1611cc3565b9050604002018036038101906112079190611d93565b905061121b81600001518260200151611513565b506001016111d5565b816001600160401b031660000361124e57604051630c26851b60e11b815260040160405180910390fd5b806001600160401b0316600003611278576040516348cfc33560e11b815260040160405180910390fd5b6001600160401b03828116600081815260036020908152604091829020805467ffffffffffffffff60b01b1916600160b01b95871695860217905581519283528201929092527f9e8c8606adb2b50f48cb69ccb1c3e349e6046ed63765e5931c01f4fe6aacd5e991015b60405180910390a15050565b806001600160401b031660000361131857604051630e661aed60e41b815260040160405180910390fd5b816001600160401b031660000361134257604051630c26851b60e11b815260040160405180910390fd5b6001600160401b03828116600081815260036020908152604091829020805467ffffffffffffffff60701b1916600160701b95871695860217905581519283528201929092527fd7d8dd5a956a8bd500e02d52d0a9dd8a0e2955ec48771a8c9da485e6706c66fb91016112e2565b336113e27f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b03161461098d5760405163118cdaa760e01b8152336004820152602401610cea565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b816001600160401b03166000036114a657604051630c26851b60e11b815260040160405180910390fd5b6001600160401b038216600081815260036020908152604091829020805465ffffffff000019166201000063ffffffff8716908102919091179091558251938452908301527f406ba3ab8c23e58f883620734592e662ac0018177590c1f9f27afc58a4b7b58391016112e2565b806000036115345760405163fa90419960e01b815260040160405180910390fd5b8161ffff16600003611559576040516350614df960e01b815260040160405180910390fd5b61ffff8216600081815260016020908152604091829020849055815192835282018390527f770404c81b5a366795e9a06ff3969e3fb2eb0515b7282e986f261c180b97623d91016112e2565b806001600160401b03166000036115cf57604051630e661aed60e41b815260040160405180910390fd5b816001600160401b03166000036115f957604051633212217560e21b815260040160405180910390fd5b6001600160401b03828116600081815260026020908152604091829020805467ffffffffffffffff60701b1916600160701b95871695860217905581519283528201929092527fe0e5abb8929e27a69d77f47a4e3f9575411a5be1fa596e5b55078d7850f358db91016112e2565b816001600160401b031660000361169157604051633212217560e21b815260040160405180910390fd5b806001600160401b03166000036116bb57604051630c26851b60e11b815260040160405180910390fd5b6001600160401b03828116600081815260026020908152604091829020805467ffffffffffffffff60b01b1916600160b01b95871695860217905581519283528201929092527f0a5853014cbdb5103840fd3b7fcd886e7a93ef446d8c8707a5269d25ed32b4fe91016112e2565b816001600160401b031660000361175357604051633212217560e21b815260040160405180910390fd5b6001600160401b038216600081815260026020908152604091829020805465ffffffff000019166201000063ffffffff8716908102919091179091558251938452908301527f525a2cd9c1093178959cb9c72fe00c6be026fc953e93c9bc789d2176da98c40591016112e2565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661098d57604051631afcd79f60e31b815260040160405180910390fd5b610cc46117c0565b60008083601f84011261182357600080fd5b5081356001600160401b0381111561183a57600080fd5b60208301915083602060a08302850101111561185557600080fd5b9250929050565b6000806020838503121561186f57600080fd5b82356001600160401b0381111561188557600080fd5b61189185828601611811565b90969095509350505050565b80356001600160a01b03811681146118b457600080fd5b919050565b80356001600160601b03811681146118b457600080fd5b60008083601f8401126118e257600080fd5b5081356001600160401b038111156118f957600080fd5b6020830191508360208260061b850101111561185557600080fd5b600080600080600080600080600060c08a8c03121561193257600080fd5b61193b8a61189d565b985061194960208b0161189d565b975061195760408b016118b9565b965060608a01356001600160401b038082111561197357600080fd5b61197f8d838e01611811565b909850965060808c013591508082111561199857600080fd5b6119a48d838e01611811565b909650945060a08c01359150808211156119bd57600080fd5b506119ca8c828d016118d0565b915080935050809150509295985092959850929598565b80356001600160401b03811681146118b457600080fd5b600060208284031215611a0a57600080fd5b611a13826119e1565b9392505050565b60a08101611a6e828461ffff815116825263ffffffff602082015116602083015260408101516001600160401b03808216604085015280606084015116606085015280608084015116608085015250505050565b92915050565b60008060408385031215611a8757600080fd5b611a90836119e1565b9150611a9e602084016119e1565b90509250929050565b600060208284031215611ab957600080fd5b611a13826118b9565b60008060008060608587031215611ad857600080fd5b611ae1856119e1565b935060208501356001600160401b0380821115611afd57600080fd5b818701915087601f830112611b1157600080fd5b813581811115611b2057600080fd5b886020828501011115611b3257600080fd5b602083019550809450505050611b4a604086016119e1565b905092959194509250565b803563ffffffff811681146118b457600080fd5b60008060408385031215611b7c57600080fd5b611b85836119e1565b9150611a9e60208401611b55565b803561ffff811681146118b457600080fd5b60008060408385031215611bb857600080fd5b611bc183611b93565b946020939093013593505050565b600060208284031215611be157600080fd5b611a1382611b93565b600060208284031215611bfc57600080fd5b611a138261189d565b60008060208385031215611c1857600080fd5b82356001600160401b03811115611c2e57600080fd5b611891858286016118d0565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417611a6e57611a6e611c3a565b600082611c8457634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115611a6e57611a6e611c3a565b6001600160401b03818116838216019080821115611cbc57611cbc611c3a565b5092915050565b634e487b7160e01b600052603260045260246000fd5b600060a08284031215611ceb57600080fd5b60405160a081018181106001600160401b0382111715611d1b57634e487b7160e01b600052604160045260246000fd5b604052905080611d2a83611b93565b8152611d3860208401611b55565b6020820152611d49604084016119e1565b6040820152611d5a606084016119e1565b6060820152611d6b608084016119e1565b60808201525092915050565b600060a08284031215611d8957600080fd5b611a138383611cd9565b600060408284031215611da557600080fd5b604051604081018181106001600160401b0382111715611dd557634e487b7160e01b600052604160045260246000fd5b604052611de183611b93565b815260208301356020820152809150509291505056fea2646970667358221220b5b4525f7807b54ac9f4b5ba2a123a4c45a47c4391c1f9b589427c3ed79fee3c64736f6c63430008180033608060405234801561001057600080fd5b5061001961001e565b6100d0565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161561006e5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100cd5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b611709806100df6000396000f3fe6080604052600436106101405760003560e01c8063499e85cd116100b6578063a10ac97a1161006f578063a10ac97a146103df578063c3de453d14610401578063c4d66de814610414578063d9caed1214610434578063ed56531a14610454578063f2fde38b1461047457600080fd5b8063499e85cd14610321578063715018a6146103415780638456cb59146103565780638da5cb5b1461036b5780638fdcb4c9146103a8578063969b53da146103bf57600080fd5b80632f4dae9f116101085780632f4dae9f1461024a57806332c8bb771461026a57806339acf9f1146102805780633abfe55f146102bf5780633f4ba83a146102df578063402914f5146102f457600080fd5b806309839a931461014557806312622e5b1461018c5780631e83409a146101c4578063241b71bb146101e657806325d70f7814610216575b600080fd5b34801561015157600080fd5b506101797f0683d1c283a672fc58eb7940a0dba83ea98b96966a9ca1b030dec2c60cea4d1e81565b6040519081526020015b60405180910390f35b34801561019857600080fd5b506000546101ac906001600160401b031681565b6040516001600160401b039091168152602001610183565b3480156101d057600080fd5b506101e46101df3660046113f2565b610494565b005b3480156101f257600080fd5b5061020661020136600461140f565b6107d9565b6040519015158152602001610183565b34801561022257600080fd5b506101797f855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c7781565b34801561025657600080fd5b506101e461026536600461140f565b6107ea565b34801561027657600080fd5b5061017960015481565b34801561028c57600080fd5b506000546102a790600160401b90046001600160a01b031681565b6040516001600160a01b039091168152602001610183565b3480156102cb57600080fd5b506101796102da366004611428565b6107fe565b3480156102eb57600080fd5b506101e46108d1565b34801561030057600080fd5b5061017961030f3660046113f2565b60036020526000908152604090205481565b34801561032d57600080fd5b506101e461033c366004611469565b6108e3565b34801561034d57600080fd5b506101e4610989565b34801561036257600080fd5b506101e461099b565b34801561037757600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166102a7565b3480156103b457600080fd5b506101ac6201388081565b3480156103cb57600080fd5b506002546102a7906001600160a01b031681565b3480156103eb57600080fd5b506101796000805160206116b483398151915281565b6101e461040f366004611428565b6109ab565b34801561042057600080fd5b506101e461042f3660046113f2565b610a01565b34801561044057600080fd5b506101e461044f3660046114ba565b610b0f565b34801561046057600080fd5b506101e461046f36600461140f565b610dbd565b34801561048057600080fd5b506101e461048f3660046113f2565b610dce565b7f855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c776104be81610e09565b156104e45760405162461bcd60e51b81526004016104db906114fb565b60405180910390fd5b60008060089054906101000a90046001600160a01b03166001600160a01b0316632f32700e6040518163ffffffff1660e01b81526004016040805180830381865afa158015610537573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055b9190611527565b600054909150600160401b90046001600160a01b031633146105b75760405162461bcd60e51b815260206004820152601560248201527413db5b9a509c9a5919d94e881b9bdd081e18d85b1b605a1b60448201526064016104db565b60005481516001600160401b0390811691161461060b5760405162461bcd60e51b81526020600482015260126024820152714f6d6e694272696467653a206e6f74204c3160701b60448201526064016104db565b6001600160a01b0383166106615760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e694272696467653a206e6f20636c61696d20746f207a65726f0000000060448201526064016104db565b6020808201516001600160a01b038116600090815260039092526040909120546106cd5760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e694272696467653a206e6f7468696e6720746f20636c61696d0000000060448201526064016104db565b6001600160a01b038181166000908152600360205260408082208054908390559051909287169083908381818185875af1925050503d806000811461072e576040519150601f19603f3d011682016040523d82523d6000602084013e610733565b606091505b50509050806107845760405162461bcd60e51b815260206004820152601b60248201527f4f6d6e694272696467653a207472616e73666572206661696c6564000000000060448201526064016104db565b856001600160a01b0316836001600160a01b03167ff7a40077ff7a04c7e61f6f26fb13774259ddf1b6bce9ecf26a8276cdd3992683846040516107c991815260200190565b60405180910390a3505050505050565b60006107e482610e09565b92915050565b6107f2610e82565b6107fb81610edd565b50565b600080546040516001600160a01b03858116602483015260448201859052600160401b83041691638dd9523c916001600160401b039091169060640160408051601f198184030181529181526020820180516001600160e01b031663f3fef3a360e01b179052516001600160e01b031960e085901b16815261088992919062013880906004016115d9565b602060405180830381865afa1580156108a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ca919061160f565b9392505050565b6108d9610e82565b6108e1610f95565b565b6108eb610e82565b600080546001600160a01b03858116600160401b81026001600160e01b03199093166001600160401b03891690811793909317909355600280549186166001600160a01b0319909216821790556001849055604080519283526020830193909352818301526060810183905290517fc12d4a2db17193df88185c2dc087fa9536c12710f1381b359b80553e5d9a12939181900360800190a150505050565b610991610e82565b6108e16000610fac565b6109a3610e82565b6108e161101d565b7f0683d1c283a672fc58eb7940a0dba83ea98b96966a9ca1b030dec2c60cea4d1e6109d581610e09565b156109f25760405162461bcd60e51b81526004016104db906114fb565b6109fc8383611034565b505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b0316600081158015610a465750825b90506000826001600160401b03166001148015610a625750303b155b905081158015610a70575080155b15610a8e5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610ab857845460ff60401b1916600160401b1785555b610ac1866112c3565b8315610b0757845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b7f855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c77610b3981610e09565b15610b565760405162461bcd60e51b81526004016104db906114fb565b60008060089054906101000a90046001600160a01b03166001600160a01b0316632f32700e6040518163ffffffff1660e01b81526004016040805180830381865afa158015610ba9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bcd9190611527565b600054909150600160401b90046001600160a01b03163314610c295760405162461bcd60e51b815260206004820152601560248201527413db5b9a509c9a5919d94e881b9bdd081e18d85b1b605a1b60448201526064016104db565b60025460208201516001600160a01b03908116911614610c845760405162461bcd60e51b81526020600482015260166024820152754f6d6e694272696467653a206e6f742062726964676560501b60448201526064016104db565b60005481516001600160401b03908116911614610cd85760405162461bcd60e51b81526020600482015260126024820152714f6d6e694272696467653a206e6f74204c3160701b60448201526064016104db565b8260016000828254610cea919061163e565b90915550506040516000906001600160a01b0386169085908381818185875af1925050503d8060008114610d3a576040519150601f19603f3d011682016040523d82523d6000602084013e610d3f565b606091505b5050905080610d76576001600160a01b03861660009081526003602052604081208054869290610d7090849061163e565b90915550505b6040805185815282151560208201526001600160a01b0380881692908916917f2b664ab52fe561d3ace376046aea39744dd736ec1f67d89d504ffd2192825f6191016107c9565b610dc5610e82565b6107fb816112d4565b610dd6610e82565b6001600160a01b038116610e0057604051631e4fbdf760e01b8152600060048201526024016104db565b6107fb81610fac565b6000805160206116b483398151915260009081527fff37105740f03695c8f3597f3aff2b92fbe1c80abea3c28731ecff2efd69340060208190527ffae9838a178d7f201aa98e2ce5340158edda60bb1e8f168f46503bf3e99f13be5460ff16806108ca5750600092835260205250604090205460ff1690565b33610eb47f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146108e15760405163118cdaa760e01b81523360048201526024016104db565b60008181527fff37105740f03695c8f3597f3aff2b92fbe1c80abea3c28731ecff2efd693400602081905260409091205460ff16610f545760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016104db565b600082815260208290526040808220805460ff191690555183917fd05bfc2250abb0f8fd265a54c53a24359c5484af63cad2e4ce87c78ab751395a91a25050565b6108e16000805160206116b4833981519152610edd565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6108e16000805160206116b48339815191526112d4565b6001600160a01b03821661108a5760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e694272696467653a206e6f2062726964676520746f207a65726f00000060448201526064016104db565b600081116110da5760405162461bcd60e51b815260206004820152601e60248201527f4f6d6e694272696467653a20616d6f756e74206d757374206265203e2030000060448201526064016104db565b60015481111561112c5760405162461bcd60e51b815260206004820152601860248201527f4f6d6e694272696467653a206e6f206c6971756964697479000000000000000060448201526064016104db565b61113682826107fe565b611140908261163e565b34101561118f5760405162461bcd60e51b815260206004820152601e60248201527f4f6d6e694272696467653a20696e73756666696369656e742066756e6473000060448201526064016104db565b80600160008282546111a19190611651565b9091555050600054600160401b90046001600160a01b031663c21dda4f6111c88334611651565b6000546002546040516001600160a01b038881166024830152604482018890526001600160401b0390931692600492169060640160408051601f198184030181529181526020820180516001600160e01b031663f3fef3a360e01b179052516001600160e01b031960e088901b16815261124d94939291906201388090600401611664565b6000604051808303818588803b15801561126657600080fd5b505af115801561127a573d6000803e3d6000fd5b50506040518481526001600160a01b03861693503392507f59bc8a913d49a9626dd6ba5def7fcf12804061c1bb9b8b6db077e1a12cb4b422915060200160405180910390a35050565b6112cb61138c565b6107fb816113d5565b60008181527fff37105740f03695c8f3597f3aff2b92fbe1c80abea3c28731ecff2efd693400602081905260409091205460ff16156113485760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016104db565b600082815260208290526040808220805460ff191660011790555183917f0cb09dc71d57eeec2046f6854976717e4874a3cf2d6ddeddde337e5b6de6ba3191a25050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166108e157604051631afcd79f60e31b815260040160405180910390fd5b610dd661138c565b6001600160a01b03811681146107fb57600080fd5b60006020828403121561140457600080fd5b81356108ca816113dd565b60006020828403121561142157600080fd5b5035919050565b6000806040838503121561143b57600080fd5b8235611446816113dd565b946020939093013593505050565b6001600160401b03811681146107fb57600080fd5b6000806000806080858703121561147f57600080fd5b843561148a81611454565b9350602085013561149a816113dd565b925060408501356114aa816113dd565b9396929550929360600135925050565b6000806000606084860312156114cf57600080fd5b83356114da816113dd565b925060208401356114ea816113dd565b929592945050506040919091013590565b60208082526012908201527113db5b9a509c9a5919d94e881c185d5cd95960721b604082015260600190565b60006040828403121561153957600080fd5b604051604081018181106001600160401b038211171561156957634e487b7160e01b600052604160045260246000fd5b604052825161157781611454565b81526020830151611587816113dd565b60208201529392505050565b6000815180845260005b818110156115b95760208185018101518683018201520161159d565b506000602082860101526020601f19601f83011685010191505092915050565b60006001600160401b038086168352606060208401526115fc6060840186611593565b9150808416604084015250949350505050565b60006020828403121561162157600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b808201808211156107e4576107e4611628565b818103818111156107e4576107e4611628565b60006001600160401b03808816835260ff8716602084015260018060a01b038616604084015260a0606084015261169e60a0840186611593565b9150808416608084015250969550505050505056fe76e8952e4b09b8d505aa08998d716721a1dbf0884ac74202e33985da1ed005e9a26469706673582212209775afebd0f12adba98113d3dac850a8b467795f44809d0686e89184da65311664736f6c634300081800336080604052600c8054600160ff199182168117909255601f8054909116909117905534801561002d57600080fd5b50613f538061003d6000396000f3fe60806040523480156200001157600080fd5b5060043610620000e05760003560e01c8063916a17c61162000097578063ba414fa6116200006e578063ba414fa61462000193578063c040622614620001ae578063e20c9f7114620001ba578063fa7626d414620001c457600080fd5b8063916a17c61462000166578063b0464fdc146200017f578063b5508aa9146200018957600080fd5b80631ed7831c14620000e55780632ade388014620001075780633e5e3c2314620001205780633f7286f4146200012a57806366d9a9a0146200013457806385226c81146200014d575b600080fd5b620000ef620001d2565b604051620000fe9190620024cc565b60405180910390f35b6200011162000236565b604051620000fe91906200256f565b620000ef62000384565b620000ef620003e6565b6200013e62000448565b604051620000fe91906200267d565b62000157620005c1565b604051620000fe91906200270a565b620001706200069b565b604051620000fe919062002772565b6200017062000785565b620001576200086f565b6200019d62000949565b6040519015158152602001620000fe565b620001b8620009ec565b005b620000ef62000b0b565b601f546200019d9060ff1681565b606060168054806020026020016040519081016040528092919081815260200182805480156200022c57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116200020d575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b828210156200037b57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b8282101562000363578382906000526020600020018054620002cf90620027e7565b80601f0160208091040260200160405190810160405280929190818152602001828054620002fd90620027e7565b80156200034e5780601f1062000322576101008083540402835291602001916200034e565b820191906000526020600020905b8154815290600101906020018083116200033057829003601f168201915b505050505081526020019060010190620002ad565b5050505081525050815260200190600101906200025a565b50505050905090565b606060188054806020026020016040519081016040528092919081815260200182805480156200022c576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116200020d575050505050905090565b606060178054806020026020016040519081016040528092919081815260200182805480156200022c576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116200020d575050505050905090565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156200037b5783829060005260206000209060020201604051806040016040529081600082018054620004a290620027e7565b80601f0160208091040260200160405190810160405280929190818152602001828054620004d090620027e7565b8015620005215780601f10620004f55761010080835404028352916020019162000521565b820191906000526020600020905b8154815290600101906020018083116200050357829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015620005a857602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b03191681526020019060040190602082600301049283019260010382029150808411620005695790505b505050505081525050815260200190600101906200046c565b6060601a805480602002602001604051908101604052809291908181526020016000905b828210156200037b5783829060005260206000200180546200060790620027e7565b80601f01602080910402602001604051908101604052809291908181526020018280546200063590620027e7565b8015620006865780601f106200065a5761010080835404028352916020019162000686565b820191906000526020600020905b8154815290600101906020018083116200066857829003601f168201915b505050505081526020019060010190620005e5565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156200037b5760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156200076c57602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116200072d5790505b50505050508152505081526020019060010190620006bf565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156200037b5760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156200085657602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b03191681526020019060040190602082600301049283019260010382029150808411620008175790505b50505050508152505081526020019060010190620007a9565b60606019805480602002602001604051908101604052809291908181526020016000905b828210156200037b578382906000526020600020018054620008b590620027e7565b80601f0160208091040260200160405190810160405280929190818152602001828054620008e390620027e7565b8015620009345780601f10620009085761010080835404028352916020019162000934565b820191906000526020600020905b8154815290600101906020018083116200091657829003601f168201915b50505050508152602001906001019062000893565b60085460009060ff161562000962575060085460ff1690565b604051630667f9d760e41b815260008051602062003efe833981519152600482018190526519985a5b195960d21b602483015260009163667f9d7090604401602060405180830381865afa158015620009bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620009e5919062002823565b1415905090565b60007f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b0316634ad0bac96040518163ffffffff1660e01b81526004016060604051808303816000875af115801562000a52573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a7891906200285a565b509091506000905081600481111562000a955762000a95620028a9565b1462000ad65760405162461bcd60e51b815260206004820152600c60248201526b1b9bc8189c9bd85918d85cdd60a21b604482015260640160405180910390fd5b62000ae062000b6d565b62000aea62001343565b62000af46200169c565b62000afe62001a58565b62000b0862001e50565b50565b606060158054806020026020016040519081016040528092919081815260200182805480156200022c576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116200020d575050505050905090565b601f805474121e24000000000000000000000000000000000200610100600160a81b0319909116179081905560408051634b4da9ed60e11b815290516101009092046001600160a01b03169163969b53da916004808201926020929091908290030181865afa15801562000be5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c0b9190620028bf565b602180546001600160a01b0319166001600160a01b03928316179055601f54604080516312622e5b60e01b81529051610100909204909216916312622e5b9160048083019260209291908290030181865afa15801562000c6f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c959190620028e4565b602260146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550601f60019054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000d11573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000d379190620028bf565b602280546001600160a01b0319166001600160a01b039290921691909117905560405162000d6590620024b1565b604051809103906000f08015801562000d82573d6000803e3d6000fd5b50602080546001600160a01b0319166001600160a01b03928316178155601f54604080516332c8bb7760e01b81529051600094610100909304909216926332c8bb77926004808401938290030181865afa15801562000de5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e0b919062002823565b90504660a60362000e57576022805467ffffffffffffffff60a01b1916600160a01b179055602180546001600160a01b03191673bbb3f5bcb1c8b0ee932efaba2fdee566b83053a51790555b6022546040516303223eab60e11b81526001600160a01b03909116600482015260008051602062003efe833981519152906306447d5690602401600060405180830381600087803b15801562000eac57600080fd5b505af115801562000ec1573d6000803e3d6000fd5b5050601f5460225460205460215460405163499e85cd60e01b8152600160a01b90930467ffffffffffffffff1660048401526001600160a01b0391821660248401528116604483015260648201869052610100909204909116925063499e85cd9150608401600060405180830381600087803b15801562000f4157600080fd5b505af115801562000f56573d6000803e3d6000fd5b5050601f54604080516309839a9360e01b815290516101009092046001600160a01b0316935063241b71bb925083916309839a93916004808201926020929091908290030181865afa15801562000fb1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000fd7919062002823565b6040518263ffffffff1660e01b815260040162000ff691815260200190565b602060405180830381865afa15801562001014573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200103a919062002910565b156200111157601f54604080516309839a9360e01b815290516101009092046001600160a01b031691632f4dae9f9183916309839a93916004808201926020929091908290030181865afa15801562001097573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010bd919062002823565b6040518263ffffffff1660e01b8152600401620010dc91815260200190565b600060405180830381600087803b158015620010f757600080fd5b505af11580156200110c573d6000803e3d6000fd5b505050505b601f54604080516304bae1ef60e31b815290516101009092046001600160a01b03169163241b71bb9183916325d70f78916004808201926020929091908290030181865afa15801562001168573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200118e919062002823565b6040518263ffffffff1660e01b8152600401620011ad91815260200190565b602060405180830381865afa158015620011cb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011f1919062002910565b15620012c857601f54604080516304bae1ef60e31b815290516101009092046001600160a01b031691632f4dae9f9183916325d70f78916004808201926020929091908290030181865afa1580156200124e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001274919062002823565b6040518263ffffffff1660e01b81526004016200129391815260200190565b600060405180830381600087803b158015620012ae57600080fd5b505af1158015620012c3573d6000803e3d6000fd5b505050505b7f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200132757600080fd5b505af11580156200133c573d6000803e3d6000fd5b5050505050565b60006200136a60405180604001604052806002815260200161746f60f01b8152506200228a565b90506000670de0b6b3a764000090506000620013a3604051806040016040528060058152602001643830bcb7b960d91b8152506200228a565b90506000601f60019054906101000a90046001600160a01b03166001600160a01b03166332c8bb776040518163ffffffff1660e01b8152600401602060405180830381865afa158015620013fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001421919062002823565b60405163f30c7ba360e01b815290915060008051602062003efe8339815191529063f30c7ba3906200145a908790879060040162002934565b600060405180830381600087803b1580156200147557600080fd5b505af11580156200148a573d6000803e3d6000fd5b5050602054602254602154601f546040516001600160a01b0389811660248301528b81166044830152606482018b905294851696506328d27d639550600160a01b90930467ffffffffffffffff1693918216926101009091049091169060840160408051601f198184030181529181526020820180516001600160e01b0316636ce5768960e11b179052516001600160e01b031960e087901b1681526200153d9493929190620186a0906004016200295c565b6020604051808303816000875af11580156200155d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001583919062002823565b5062001614601f60019054906101000a90046001600160a01b03166001600160a01b03166332c8bb776040518163ffffffff1660e01b8152600401602060405180830381865afa158015620015dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001602919062002823565b6200160e8584620029b1565b6200229e565b601f5460405163402914f560e01b81526001600160a01b03848116600483015262001696926101009004169063402914f5906024015b602060405180830381865afa15801562001668573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200168e919062002823565b60006200229e565b50505050565b6000620016c360405180604001604052806002815260200161746f60f01b8152506200228a565b601f54604051633abfe55f60e01b81526001600160a01b038084166004830152670de0b6b3a76400006024830181905293945060009261010090041690633abfe55f90604401602060405180830381865afa15801562001727573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200174d919062002823565b6020546022546021546040516001600160a01b0388811660248301526044820188905294955060008051602062003efe8339815191529463f30c7ba3948116938793600160a01b90910467ffffffffffffffff16926004929091169060640160408051808303601f190181529181526020808301805163f3fef3a360e01b6001600160e01b03909116179052601f548251638fdcb4c960e01b815292516101009091046001600160a01b031692638fdcb4c99260048083019391928290030181865afa15801562001822573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620018489190620028e4565b6040516024016200185e959493929190620029d9565b60408051601f198184030181529181526020820180516001600160e01b031663c21dda4f60e01b179052516001600160e01b031960e086901b168152620018ab9392919060040162002a16565b600060405180830381600087803b158015620018c657600080fd5b505af1158015620018db573d6000803e3d6000fd5b5060008051602062003efe833981519152925063c88a5e6d9150859050620019048486620029b1565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156200194b57600080fd5b505af115801562001960573d6000803e3d6000fd5b505060405163ca669fa760e01b81526001600160a01b038616600482015260008051602062003efe833981519152925063ca669fa79150602401600060405180830381600087803b158015620019b557600080fd5b505af1158015620019ca573d6000803e3d6000fd5b5050601f5461010090046001600160a01b0316915063c3de453d9050620019f28385620029b1565b6040516001600160e01b031960e084901b1681526001600160a01b0387166004820152602481018690526044016000604051808303818588803b15801562001a3957600080fd5b505af115801562001a4e573d6000803e3d6000fd5b5050505050505050565b600062001a7f60405180604001604052806002815260200161746f60f01b8152506200228a565b90506000670de0b6b3a76400009050600062001ab8604051806040016040528060058152602001643830bcb7b960d91b8152506200228a565b9050600060405162001aca90620024bf565b604051809103906000f08015801562001ae7573d6000803e3d6000fd5b5060405163f30c7ba360e01b815290915060008051602062003efe8339815191529063f30c7ba39062001b21908490879060040162002934565b600060405180830381600087803b15801562001b3c57600080fd5b505af115801562001b51573d6000803e3d6000fd5b5050602054602254602154601f546040516001600160a01b0389811660248301528881166044830152606482018b905294851696506328d27d639550600160a01b90930467ffffffffffffffff1693918216926101009091049091169060840160408051601f198184030181529181526020820180516001600160e01b0316636ce5768960e11b179052516001600160e01b031960e087901b16815262001c049493929190620186a0906004016200295c565b6020604051808303816000875af115801562001c24573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c4a919062002823565b50601f5460405163402914f560e01b81526001600160a01b03848116600483015262001ccb926101009004169063402914f590602401602060405180830381865afa15801562001c9e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001cc4919062002823565b846200229e565b60405163f30c7ba360e01b815260008051602062003efe8339815191529063f30c7ba39062001d01908790879060040162002934565b600060405180830381600087803b15801562001d1c57600080fd5b505af115801562001d31573d6000803e3d6000fd5b5050602054602254601f546040516001600160a01b038a8116602483015293841695506328d27d639450600160a01b90920467ffffffffffffffff16928792610100909204169060440160408051601f198184030181529181526020820180516001600160e01b0316630f41a04d60e11b179052516001600160e01b031960e087901b16815262001dce9493929190620186a0906004016200295c565b6020604051808303816000875af115801562001dee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001e14919062002823565b50601f5460405163402914f560e01b81526001600160a01b03848116600483015262001696926101009004169063402914f5906024016200164a565b60225460405163ca669fa760e01b81526001600160a01b03909116600482015260008051602062003efe8339815191529063ca669fa790602401600060405180830381600087803b15801562001ea557600080fd5b505af115801562001eba573d6000803e3d6000fd5b50505050601f60019054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562001f0f57600080fd5b505af115801562001f24573d6000803e3d6000fd5b5050601f54604080516309839a9360e01b815290516200201294506101009092046001600160a01b0316925063241b71bb9183916309839a939160048083019260209291908290030181865afa15801562001f83573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001fa9919062002823565b6040518263ffffffff1660e01b815260040162001fc891815260200190565b602060405180830381865afa15801562001fe6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200200c919062002910565b62002309565b601f54604080516304bae1ef60e31b815290516200206c9261010090046001600160a01b03169163241b71bb9183916325d70f789160048083019260209291908290030181865afa15801562001f83573d6000803e3d6000fd5b60225460405163ca669fa760e01b81526001600160a01b03909116600482015260008051602062003efe8339815191529063ca669fa790602401600060405180830381600087803b158015620020c157600080fd5b505af1158015620020d6573d6000803e3d6000fd5b50505050601f60019054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200212b57600080fd5b505af115801562002140573d6000803e3d6000fd5b5050601f54604080516309839a9360e01b815290516200222e94506101009092046001600160a01b0316925063241b71bb9183916309839a939160048083019260209291908290030181865afa1580156200219f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620021c5919062002823565b6040518263ffffffff1660e01b8152600401620021e491815260200190565b602060405180830381865afa15801562002202573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002228919062002910565b62002367565b601f54604080516304bae1ef60e31b81529051620022889261010090046001600160a01b03169163241b71bb9183916325d70f789160048083019260209291908290030181865afa1580156200219f573d6000803e3d6000fd5b565b600062002297826200239c565b5092915050565b60405163260a5b1560e21b8152600481018390526024810182905260008051602062003efe833981519152906398296c549060440160006040518083038186803b158015620022ec57600080fd5b505afa15801562002301573d6000803e3d6000fd5b505050505050565b604051630c9fd58160e01b8152811515600482015260008051602062003efe83398151915290630c9fd581906024015b60006040518083038186803b1580156200235257600080fd5b505afa1580156200133c573d6000803e3d6000fd5b60405163a598288560e01b8152811515600482015260008051602062003efe8339815191529063a59828859060240162002339565b60008082604051602001620023b2919062002a48565b60408051808303601f190181529082905280516020909101206001625e79b760e01b0319825260048201819052915060008051602062003efe8339815191529063ffa1864990602401602060405180830381865afa15801562002419573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200243f9190620028bf565b6040516318caf8e360e31b815290925060008051602062003efe8339815191529063c657c7189062002478908590879060040162002a66565b600060405180830381600087803b1580156200249357600080fd5b505af1158015620024a8573d6000803e3d6000fd5b50505050915091565b61140d8062002a9583390190565b605c8062003ea283390190565b6020808252825182820181905260009190848201906040850190845b818110156200250f5783516001600160a01b031683529284019291840191600101620024e8565b50909695505050505050565b60005b83811015620025385781810151838201526020016200251e565b50506000910152565b600081518084526200255b8160208601602086016200251b565b601f01601f19169290920160200192915050565b602080825282518282018190526000919060409081850190600581811b8701840188860187805b858110156200262557603f198b8503018752825180516001600160a01b031685528901518985018990528051898601819052908a0190606081881b870181019190870190855b818110156200260e57605f19898503018352620025fb84865162002541565b948e01949350918d0191600101620025dc565b505050978a01979450509188019160010162002596565b50919a9950505050505050505050565b60008151808452602080850194506020840160005b83811015620026725781516001600160e01b031916875295820195908201906001016200264a565b509495945050505050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b83811015620026fc57888303603f1901855281518051878552620026cd8886018262002541565b91890151858303868b0152919050620026e7818362002635565b968901969450505090860190600101620026a6565b509098975050505050505050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b828110156200276557603f198886030184526200275285835162002541565b9450928501929085019060010162002733565b5092979650505050505050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b83811015620026fc57888303603f19018552815180516001600160a01b03168452870151878401879052620027d38785018262002635565b95880195935050908601906001016200279b565b600181811c90821680620027fc57607f821691505b6020821081036200281d57634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156200283657600080fd5b5051919050565b80516001600160a01b03811681146200285557600080fd5b919050565b6000806000606084860312156200287057600080fd5b8351600581106200288057600080fd5b925062002890602085016200283d565b9150620028a0604085016200283d565b90509250925092565b634e487b7160e01b600052602160045260246000fd5b600060208284031215620028d257600080fd5b620028dd826200283d565b9392505050565b600060208284031215620028f757600080fd5b815167ffffffffffffffff81168114620028dd57600080fd5b6000602082840312156200292357600080fd5b81518015158114620028dd57600080fd5b6001600160a01b03929092168252602082015260606040820181905260009082015260800190565b67ffffffffffffffff86811682526001600160a01b0386811660208401528516604083015260a060608301819052600091906200299c9084018662002541565b91508084166080840152509695505050505050565b80820180821115620029d357634e487b7160e01b600052601160045260246000fd5b92915050565b600067ffffffffffffffff808816835260ff8716602084015260018060a01b038616604084015260a060608401526200299c60a084018662002541565b60018060a01b038416815282602082015260606040820152600062002a3f606083018462002541565b95945050505050565b6000825162002a5c8184602087016200251b565b9190910192915050565b6001600160a01b038316815260406020820181905260009062002a8c9083018462002541565b94935050505056fe60c0604052600080546001600160a01b0319167301004e20000000000000520800000000004c4b4017905534801561003657600080fd5b506001600160401b03461660805260a660a052604051633b9aca009061005b906100a3565b908152602001604051809103906000f08015801561007d573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b03929092169190911790556100b0565b6101d08061123d83390190565b60805160a0516111616100dc60003960006101a30152600081816104450152610a5601526111616000f3fe60806040526004361061014b5760003560e01c80636739afca116100b6578063b2b2f5bd1161006f578063b2b2f5bd146104cb578063b4d5afd1146104ff578063c21dda4f14610534578063c26dfc0514610547578063cf84c81814610569578063d051c97d1461058957600080fd5b80636739afca146103ca57806378fe5307146103ec5780638dd9523c146104135780639a8a059214610433578063a32eb7c614610467578063aaf1bc971461049b57600080fd5b80632f32700e116101085780632f32700e1461026b5780633aa87330146102d05780633fd3b15e14610311578063500b19e71461035257806355e2448e1461038a57806366a1eaf3146103aa57600080fd5b80630360d20f1461015057806306c3dc5f1461017c578063110ff5f11461019157806324278bbe146101dd57806328d27d631461021d5780632cc3d3541461024b575b600080fd5b34801561015c57600080fd5b50610165600281565b60405160ff90911681526020015b60405180910390f35b34801561018857600080fd5b50610165600381565b34801561019d57600080fd5b506101c57f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160401b039091168152602001610173565b3480156101e957600080fd5b5061020d6101f8366004610ccb565b60066020526000908152604090205460ff1681565b6040519015158152602001610173565b34801561022957600080fd5b5061023d610238366004610d4c565b6105ca565b604051908152602001610173565b34801561025757600080fd5b5061023d610266366004610dd0565b6107e2565b34801561027757600080fd5b506040805180820182526000808252602091820152815180830183526007546001600160401b0381168083526001600160a01b03600160401b909204821692840192835284519081529151169181019190915201610173565b3480156102dc57600080fd5b506101c56102eb366004610e45565b60026020908152600092835260408084209091529082529020546001600160401b031681565b34801561031d57600080fd5b506101c561032c366004610e45565b60046020908152600092835260408084209091529082529020546001600160401b031681565b34801561035e57600080fd5b50600154610372906001600160a01b031681565b6040516001600160a01b039091168152602001610173565b34801561039657600080fd5b506007546001600160401b0316151561020d565b3480156103b657600080fd5b506103c86103c5366004610e78565b50565b005b3480156103d657600080fd5b506103df6108c8565b6040516101739190610eb3565b3480156103f857600080fd5b506000546101c590600160401b90046001600160401b031681565b34801561041f57600080fd5b5061023d61042e366004610f64565b61090e565b34801561043f57600080fd5b506101c57f000000000000000000000000000000000000000000000000000000000000000081565b34801561047357600080fd5b5061023d7ffeccba1cfc4544bf9cd83b76f36ae5c464750b6c43f682e26744ee21ec31fc1e81565b3480156104a757600080fd5b5061020d6104b6366004610ccb565b60056020526000908152604090205460ff1681565b3480156104d757600080fd5b5061023d7fa06a0c1264badca141841b5f52470407dac9adaaa539dd445540986341b73a6881565b34801561050b57600080fd5b5060005461052190600160801b900461ffff1681565b60405161ffff9091168152602001610173565b6103c8610542366004610fc8565b61098f565b34801561055357600080fd5b5060005461052190600160901b900461ffff1681565b34801561057557600080fd5b506000546101c5906001600160401b031681565b34801561059557600080fd5b506101c56105a4366004610e45565b60036020908152600092835260408084209091529082529020546001600160401b031681565b600080546001600160401b03908116908316111561062f5760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e69506f7274616c3a206761734c696d697420746f6f206869676800000060448201526064015b60405180910390fd5b6000546001600160401b03600160401b909104811690831610156106955760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a206761734c696d697420746f6f206c6f77000000006044820152606401610626565b604080518082019091526001600160401b0388168082526001600160a01b0388166020909201829052600780546001600160e01b031916909117600160401b9092029190911790555a9050600080866001600160a01b0316846001600160401b03168787604051610707929190611000565b60006040518083038160008787f1925050503d8060008114610745576040519150601f19603f3d011682016040523d82523d6000602084013e61074a565b606091505b50915091505a61075a9084611026565b600780546001600160e01b03191690559250811580156107835750836001600160401b03168310155b156107c95760405162461bcd60e51b81526020600482015260166024820152754d6f636b506f7274616c3a206f7574206f662067617360501b6044820152606401610626565b816107d657805160208201fd5b50509695505050505050565b604080518082019091526001600160401b0386168082526001600160a01b0386166020909201829052600780546001600160e01b031916909117600160401b90920291909117905560005a9050600080856001600160a01b0316858560405161084c929190611000565b6000604051808303816000865af19150503d8060008114610889576040519150601f19603f3d011682016040523d82523d6000602084013e61088e565b606091505b50915091505a61089e9084611026565b600780546001600160e01b03191690559250816108bd57805160208201fd5b505095945050505050565b60408051600080825260208201909252606091610908565b6040805180820190915260008152606060208201528152602001906001900390816108e05790505b50905090565b600154604051632376548f60e21b81526000916001600160a01b031690638dd9523c90610945908890889088908890600401611068565b602060405180830381865afa158015610962573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061098691906110a0565b95945050505050565b6000546001600160401b0390811690821611156109ee5760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e69506f7274616c3a206761734c696d697420746f6f20686967680000006044820152606401610626565b6000546001600160401b03600160401b90910481169082161015610a545760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a206761734c696d697420746f6f206c6f77000000006044820152606401610626565b7f00000000000000000000000000000000000000000000000000000000000000006001600160401b0316866001600160401b031603610ad55760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a20756e737570706f727465642064657374000000006044820152606401610626565b6001600160401b038616610b2b5760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a20756e737570706f727465642064657374000000006044820152606401610626565b6001600160a01b038416610b815760405162461bcd60e51b815260206004820152601b60248201527f4f6d6e69506f7274616c3a206e6f20706f7274616c207863616c6c00000000006044820152606401610626565b6000610b8f8785858561090e565b905080341015610be15760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a20696e73756666696369656e7420666565000000006044820152606401610626565b6001600160401b03808816600090815260026020908152604080832060ff8b1680855292528220805491936001939192610c1d918591166110b9565b82546101009290920a6001600160401b0381810219909316918316021790915589811660008181526002602090815260408083208786168085529252918290205491519190931693507fb7c8eb9d7a7fbcdab809ab7b8a7c41701eb3115e3fe99d30ff490d8552f72bfa90610c9d9033908c908c908c908c908c906110e0565b60405180910390a45050505050505050565b80356001600160401b0381168114610cc657600080fd5b919050565b600060208284031215610cdd57600080fd5b610ce682610caf565b9392505050565b80356001600160a01b0381168114610cc657600080fd5b60008083601f840112610d1657600080fd5b5081356001600160401b03811115610d2d57600080fd5b602083019150836020828501011115610d4557600080fd5b9250929050565b60008060008060008060a08789031215610d6557600080fd5b610d6e87610caf565b9550610d7c60208801610ced565b9450610d8a60408801610ced565b935060608701356001600160401b03811115610da557600080fd5b610db189828a01610d04565b9094509250610dc4905060808801610caf565b90509295509295509295565b600080600080600060808688031215610de857600080fd5b610df186610caf565b9450610dff60208701610ced565b9350610e0d60408701610ced565b925060608601356001600160401b03811115610e2857600080fd5b610e3488828901610d04565b969995985093965092949392505050565b60008060408385031215610e5857600080fd5b610e6183610caf565b9150610e6f60208401610caf565b90509250929050565b600060208284031215610e8a57600080fd5b81356001600160401b03811115610ea057600080fd5b82016101808185031215610ce657600080fd5b600060208083018184528085518083526040925060408601915060408160051b8701018488016000805b84811015610f5557898403603f19018652825180516001600160401b039081168652908901518986018990528051898701819052908a0191849160608801905b80841015610f3f57845183168252938c019360019390930192908c0190610f1d565b50988b0198965050509288019250600101610edd565b50919998505050505050505050565b60008060008060608587031215610f7a57600080fd5b610f8385610caf565b935060208501356001600160401b03811115610f9e57600080fd5b610faa87828801610d04565b9094509250610fbd905060408601610caf565b905092959194509250565b60008060008060008060a08789031215610fe157600080fd5b610fea87610caf565b9550602087013560ff81168114610d7c57600080fd5b8183823760009101908152919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561103957611039611010565b92915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60006001600160401b0380871683526060602084015261108c60608401868861103f565b915080841660408401525095945050505050565b6000602082840312156110b257600080fd5b5051919050565b6001600160401b038181168382160190808211156110d9576110d9611010565b5092915050565b6001600160a01b0387811682528616602082015260a06040820181905260009061110d908301868861103f565b6001600160401b03949094166060830152506080015294935050505056fea2646970667358221220fd7b887f78d4d6f8b128aeff3bca8f522590cf1ade5c373d54b1d4a974105a0564736f6c63430008180033608060405234801561001057600080fd5b506040516101d03803806101d083398101604081905261002f91610037565b600055610050565b60006020828403121561004957600080fd5b5051919050565b6101718061005f6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806354fd4d50146100465780638dd9523c1461005a578063ddca3f4314610081575b600080fd5b604051600181526020015b60405180910390f35b6100736100683660046100a7565b600054949350505050565b604051908152602001610051565b61007360005481565b803567ffffffffffffffff811681146100a257600080fd5b919050565b600080600080606085870312156100bd57600080fd5b6100c68561008a565b9350602085013567ffffffffffffffff808211156100e357600080fd5b818701915087601f8301126100f757600080fd5b81358181111561010657600080fd5b88602082850101111561011857600080fd5b6020830195508094505050506101306040860161008a565b90509295919450925056fea2646970667358221220590210d19b70b700525ca08edfb5f66d40cc1e65dbe3999c4a70b839b2075d9464736f6c634300081800336080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea26469706673582212206327234a5ca7dda5d1a8236e82fd71259e5912bfaf443ba25aded274bc0b65eb64736f6c634300081800330000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12da264697066735822122074ec4cc99009d238e45a3232457c3b47e903f31b64b8bb178b8bfbd9086536c064736f6c634300081800336080604052600c8054600160ff199182168117909255601f8054909116909117905534801561002d57600080fd5b506119f38061003d6000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c806385226c811161008c578063b5508aa911610066578063b5508aa914610173578063ba414fa61461017b578063e20c9f7114610193578063fa7626d41461019b57600080fd5b806385226c8114610141578063916a17c614610156578063b0464fdc1461016b57600080fd5b80631ed7831c146100d45780632ade3880146100f25780633e5e3c23146101075780633f7286f41461010f578063522bb7041461011757806366d9a9a01461012c575b600080fd5b6100dc6101a8565b6040516100e991906114a9565b60405180910390f35b6100fa61020a565b6040516100e9919061153c565b6100dc61034c565b6100dc6103ac565b61012a610125366004611614565b61040c565b005b61013461051c565b6040516100e99190611677565b610149610689565b6040516100e991906116fe565b61015e610759565b6040516100e99190611762565b61015e61083f565b610149610925565b6101836109f5565b60405190151581526020016100e9565b6100dc610a99565b601f546101839060ff1681565b6060601680548060200260200160405190810160405280929190818152602001828054801561020057602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116101e2575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561034357600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b8282101561032c57838290600052602060002001805461029f906117d3565b80601f01602080910402602001604051908101604052809291908181526020018280546102cb906117d3565b80156103185780601f106102ed57610100808354040283529160200191610318565b820191906000526020600020905b8154815290600101906020018083116102fb57829003601f168201915b505050505081526020019060010190610280565b50505050815250508152602001906001019061022e565b50505050905090565b60606018805480602002602001604051908101604052809291908181526020018280548015610200576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116101e2575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610200576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116101e2575050505050905090565b60007f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b0316634ad0bac96040518163ffffffff1660e01b81526004016060604051808303816000875af1158015610471573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610495919061180d565b50909150600090508160048111156104af576104af61185e565b146104f05760405162461bcd60e51b815260206004820152600c60248201526b1b9bc8189c9bd85918d85cdd60a21b60448201526064015b60405180910390fd5b60006104fb83610af9565b905061050681610c15565b61050f81610e1a565b610517611028565b505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156103435783829060005260206000209060020201604051806040016040529081600082018054610573906117d3565b80601f016020809104026020016040519081016040528092919081815260200182805461059f906117d3565b80156105ec5780601f106105c1576101008083540402835291602001916105ec565b820191906000526020600020905b8154815290600101906020018083116105cf57829003601f168201915b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561067157602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116106335790505b50505050508152505081526020019060010190610540565b6060601a805480602002602001604051908101604052809291908181526020016000905b828210156103435783829060005260206000200180546106cc906117d3565b80601f01602080910402602001604051908101604052809291908181526020018280546106f8906117d3565b80156107455780601f1061071a57610100808354040283529160200191610745565b820191906000526020600020905b81548152906001019060200180831161072857829003601f168201915b5050505050815260200190600101906106ad565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156103435760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561082757602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116107e95790505b5050505050815250508152602001906001019061077d565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156103435760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561090d57602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116108cf5790505b50505050508152505081526020019060010190610863565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015610343578382906000526020600020018054610968906117d3565b80601f0160208091040260200160405190810160405280929190818152602001828054610994906117d3565b80156109e15780601f106109b6576101008083540402835291602001916109e1565b820191906000526020600020905b8154815290600101906020018083116109c457829003601f168201915b505050505081526020019060010190610949565b60085460009060ff1615610a0d575060085460ff1690565b604051630667f9d760e41b8152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190526519985a5b195960d21b602483015260009163667f9d7090604401602060405180830381865afa158015610a6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a929190611874565b1415905090565b60606015805480602002602001604051908101604052809291908181526020018280548015610200576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116101e2575050505050905090565b601f8054610100600160a81b0319166101006001600160a01b038416021790556000610b27602060a461119a565b50610b35602061426861119a565b50610b44602062014a3461119a565b50610b53602062066eee61119a565b50610b62602062aa37dc61119a565b50610b6f6021600161119a565b50610b7c6021600a61119a565b50610b89602160a661119a565b50610b97602161210561119a565b50610ba5602161a4b161119a565b50610bb16020466111ad565b15610bbe57506001919050565b610bc96021466111ad565b15610bd657506002919050565b60405162461bcd60e51b815260206004820152600f60248201526e696e76616c6964206e6574776f726b60881b60448201526064016104e7565b919050565b60006001826002811115610c2b57610c2b61185e565b14610c3f57610c3a60216111b9565b610c49565b610c4960206111b9565b905060005b8151811015610517576000828281518110610c6b57610c6b61188d565b6020908102919091010151601f54604051630b518d2960e21b815267ffffffffffffffff831660048201529192506000916101009091046001600160a01b031690632d4634a49060240160a060405180830381865afa158015610cd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf69190611979565b9050610d39816000015161ffff1660006040518060400160405280601581526020017419d85cc81d1bdad95b881b5d5cdd081899481cd95d605a1b8152506111d0565b610d7f816040015167ffffffffffffffff1660006040518060400160405280601481526020017318da185a5b881a59081b5d5cdd081899481cd95d60621b8152506111d0565b610dc6816060015167ffffffffffffffff1660006040518060400160405280601581526020017419d85cc81c1c9a58d9481b5d5cdd081899481cd95d605a1b8152506111d0565b610e10816080015167ffffffffffffffff1660006040518060400160405280601881526020017719185d184818dbdcdd081a59081b5d5cdd081899481cd95d60421b8152506111d0565b5050600101610c4e565b60006001826002811115610e3057610e3061185e565b14610e4457610e3f60216111b9565b610e4e565b610e4e60206111b9565b905060005b8151811015610517576000828281518110610e7057610e7061188d565b6020908102919091010151601f54604051635fe38a0b60e11b815267ffffffffffffffff831660048201529192506000916101009091046001600160a01b03169063bfc714169060240160a060405180830381865afa158015610ed7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610efb9190611979565b9050610f3e816000015161ffff1660006040518060400160405280601581526020017419d85cc81d1bdad95b881b5d5cdd081899481cd95d605a1b8152506111d0565b610f88816040015167ffffffffffffffff1660006040518060400160405280601881526020017719185d184818dbdcdd081a59081b5d5cdd081899481cd95d60421b8152506111d0565b610fcf816060015167ffffffffffffffff1660006040518060400160405280601581526020017419d85cc81c1c9a58d9481b5d5cdd081899481cd95d605a1b8152506111d0565b61101e816080015167ffffffffffffffff1660006040518060400160405280601881526020017f676173207065722062797465206d7573742062652073657400000000000000008152506111d0565b5050600101610e53565b601f546040516358bedb4560e11b81526001600482015260009161010090046001600160a01b03169063b17db68a90602401602060405180830381865afa158015611077573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061109b9190611874565b601f546040516358bedb4560e11b8152600260048201529192506000916101009091046001600160a01b03169063b17db68a90602401602060405180830381865afa1580156110ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111129190611874565b90506111558260006040518060400160405280601c81526020017f6f6d6e69206e61746976652072617465206d75737420626520736574000000008152506111d0565b6111968160006040518060400160405280601b81526020017f657468206e61746976652072617465206d7573742062652073657400000000008152506111d0565b5050565b60006111a68383611240565b9392505050565b60006111a68383611361565b60606111ca6111c7836113ee565b90565b92915050565b604051636cd1e26960e11b8152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063d9a3c4d29061120b90869086908690600401611995565b60006040518083038186803b15801561122357600080fd5b505afa158015611237573d6000803e3d6000fd5b50505050505050565b6318fb586460045260008281526024812068fbb67fda52d4bfb8bf830361126f5763f5a267f16000526004601cfd5b826112815768fbb67fda52d4bfb8bf92505b8019548160205280611326578154806112a1578483556001935050611359565b8481036112ae5750611359565b6001830154806112c957856001850155600194505050611359565b8581036112d7575050611359565b6002840154806112f35786600286015560019550505050611359565b86810361130257505050611359565b60009283526040808420600190559183528183206002905582529020600390555060075b836000526040600020805461135757600191821c8381018690558083019182905590821b8217831955909250611359565b505b505092915050565b6318fb586460045260008281526024812068fbb67fda52d4bfb8bf83036113905763f5a267f16000526004601cfd5b826113a25768fbb67fda52d4bfb8bf92505b8019546113d45780546001925083146113e757600181015483146113e757600281015483146113e757600091506113e7565b8060205282600052604060002054151591505b5092915050565b6318fb5864600452600081815260249020801954604051919068fbb67fda52d4bfb8bf90602084018161146857835480156114625780841415028152600184810154909250801561146257808414150260208201526002848101549092508015611462576003925083811415810260408301525b50611494565b8160011c915060005b8281101561149257848101548481141502600582901b830152600101611471565b505b8185528160051b810160405250505050919050565b6020808252825182820181905260009190848201906040850190845b818110156114ea5783516001600160a01b0316835292840192918401916001016114c5565b50909695505050505050565b6000815180845260005b8181101561151c57602081850181015186830182015201611500565b506000602082860101526020601f19601f83011685010191505092915050565b602080825282518282018190526000919060409081850190600581811b8701840188860187805b858110156115ec57603f198b8503018752825180516001600160a01b031685528901518985018990528051898601819052908a0190606081881b870181019190870190855b818110156115d657605f198985030183526115c48486516114f6565b948e01949350918d01916001016115a8565b505050978a019794505091880191600101611563565b50919a9950505050505050505050565b6001600160a01b038116811461161157600080fd5b50565b60006020828403121561162657600080fd5b81356111a6816115fc565b60008151808452602080850194506020840160005b8381101561166c5781516001600160e01b03191687529582019590820190600101611646565b509495945050505050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b838110156116f057888303603f19018552815180518785526116c4888601826114f6565b91890151858303868b01529190506116dc8183611631565b9689019694505050908601906001016116a0565b509098975050505050505050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101561175557603f198886030184526117438583516114f6565b94509285019290850190600101611727565b5092979650505050505050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b838110156116f057888303603f19018552815180516001600160a01b031684528701518784018790526117c087850182611631565b958801959350509086019060010161178b565b600181811c908216806117e757607f821691505b60208210810361180757634e487b7160e01b600052602260045260246000fd5b50919050565b60008060006060848603121561182257600080fd5b83516005811061183157600080fd5b6020850151909350611842816115fc565b6040850151909250611853816115fc565b809150509250925092565b634e487b7160e01b600052602160045260246000fd5b60006020828403121561188657600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b805163ffffffff81168114610c1057600080fd5b805167ffffffffffffffff81168114610c1057600080fd5b600060a082840312156118e157600080fd5b60405160a0810181811067ffffffffffffffff8211171561191257634e487b7160e01b600052604160045260246000fd5b8060405250809150825161ffff8116811461192c57600080fd5b815261193a602084016118a3565b602082015261194b604084016118b7565b604082015261195c606084016118b7565b606082015261196d608084016118b7565b60808201525092915050565b600060a0828403121561198b57600080fd5b6111a683836118cf565b8381528260208201526060604082015260006119b460608301846114f6565b9594505050505056fea2646970667358221220c45d76174219ce632bb65ff06d5237bbd2f6028cba08c5a26bd6ec24ed933faf64736f6c63430008180033608060405234801561001057600080fd5b5061015e806100206000396000f3fe6080604052600436106100295760003560e01c8063bef7a2f01461002e578063f679d3051461005c575b600080fd5b34801561003a57600080fd5b5061004a67016345785d8a000081565b60405190815260200160405180910390f35b610064610066565b005b61006e61009b565b60405133907fc3ef55ddda4bc9300706e15ab3aed03c762d8afd43a7d358a7b9503cb39f281b90600090a2565b67016345785d8a00003410156100f75760405162461bcd60e51b815260206004820152601a60248201527f536c617368696e673a20696e73756666696369656e7420666565000000000000604482015260640160405180910390fd5b60405161dead903480156108fc02916000818181858888f19350505050158015610125573d6000803e3d6000fd5b5056fea264697066735822122068796df7e832c0339bd6354c88a7f1784975f67034bb7fba147dd8be5cec6fc964736f6c63430008180033608060405234801561001057600080fd5b5061001961001e565b6100d0565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161561006e5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100cd5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b611e22806100df6000396000f3fe6080604052600436106101145760003560e01c806384b0196e116100a0578063c6a2aac811610064578063c6a2aac814610306578063cf8e629a1461031b578063d146fd1b14610330578063eb4bd8441461034a578063f2fde38b1461035d57600080fd5b806384b0196e146102515780638ab65686146102795780638da5cb5b1461028c5780638f38fae8146102d3578063a5a470ad146102f357600080fd5b8063400ada75116100e7578063400ada75146101ab57806359bcddde146101cb5780635cd8a76b146101e7578063715018a6146101fc57806384768b7a1461021157600080fd5b8063117407e31461011957806311bcd8301461013b578063296192f41461016b5780633f0b1edf1461018b575b600080fd5b34801561012557600080fd5b50610139610134366004611817565b61037d565b005b34801561014757600080fd5b5061015868056bc75e2d6310000081565b6040519081526020015b60405180910390f35b34801561017757600080fd5b5061015861018636600461188c565b61044d565b34801561019757600080fd5b506101396101a6366004611817565b6104b3565b3480156101b757600080fd5b506101396101c63660046118ca565b61057f565b3480156101d757600080fd5b50610158670de0b6b3a764000081565b3480156101f357600080fd5b506101396106ce565b34801561020857600080fd5b506101396107d1565b34801561021d57600080fd5b5061024161022c366004611906565b60016020526000908152604090205460ff1681565b6040519015158152602001610162565b34801561025d57600080fd5b506102666107e5565b6040516101629796959493929190611967565b610139610287366004611a00565b610896565b34801561029857600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546040516001600160a01b039091168152602001610162565b3480156102df57600080fd5b506101396102ee3660046118ca565b610985565b610139610301366004611a7c565b610a35565b34801561031257600080fd5b50610139610b5b565b34801561032757600080fd5b50610139610b99565b34801561033c57600080fd5b506000546102419060ff1681565b610139610358366004611abe565b610bd4565b34801561036957600080fd5b50610139610378366004611906565b610d61565b610385610d9f565b60005b818110156104485760018060008585858181106103a7576103a7611b11565b90506020020160208101906103bc9190611906565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558282828181106103f6576103f6611b11565b905060200201602081019061040b9190611906565b6001600160a01b03167fc6bdfc1f9b9f1f30ad26b86a7c623e58400512467a50e0c80439bfdaf3a2de9860405160405180910390a2600101610388565b505050565b604080517fc9a51567e61a6d1a243a60e57bf4560e7e543694b79349ce2cba3a14fe21b0426020820152908101839052606081018290526000906104aa906080015b60405160208183030381529060405280519060200120610dfa565b90505b92915050565b6104bb610d9f565b60005b81811015610448576000600160008585858181106104de576104de611b11565b90506020020160208101906104f39190611906565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905582828281811061052d5761052d611b11565b90506020020160208101906105429190611906565b6001600160a01b03167f3df1f5fcca9e1ece84ca685a63062905d8fe97ddb23246224be416f2d3c8613f60405160405180910390a26001016104be565b600080516020611dcd8339815191528054600160401b810460ff16159067ffffffffffffffff166000811580156105b35750825b905060008267ffffffffffffffff1660011480156105d05750303b155b9050811580156105de575080155b156105fc5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561062657845460ff60401b1916600160401b1785555b61062f87610e27565b610671604051806040016040528060078152602001665374616b696e6760c81b815250604051806040016040528060018152602001603160f81b815250610e38565b6000805460ff191687151517905583156106c557845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b600080516020611dcd833981519152805460029190600160401b900460ff16806107065750805467ffffffffffffffff808416911610155b156107245760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff191667ffffffffffffffff831617600160401b17815560408051808201825260078152665374616b696e6760c81b602080830191909152825180840190935260018352603160f81b9083015261078591610e38565b805460ff60401b1916815560405167ffffffffffffffff831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050565b6107d9610d9f565b6107e36000610e4e565b565b60006060808280808381600080516020611dad833981519152805490915015801561081257506001810154155b61085b5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b60448201526064015b60405180910390fd5b610863610ebf565b61086b610f82565b60408051600080825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b60005460ff1615806108c057506001600160a01b03811660009081526001602052604090205460ff165b61090c5760405162461bcd60e51b815260206004820152601860248201527f5374616b696e673a206e6f7420616c6c6f7765642076616c00000000000000006044820152606401610852565b670de0b6b3a76400003410156109345760405162461bcd60e51b815260040161085290611b3d565b806001600160a01b0316826001600160a01b03167f510b11bb3f3c799b11307c01ab7db0d335683ef5b2da98f7697de744f465eacc3460405161097991815260200190565b60405180910390a35050565b600080516020611dcd8339815191528054600160401b810460ff16159067ffffffffffffffff166000811580156109b95750825b905060008267ffffffffffffffff1660011480156109d65750303b155b9050811580156109e4575080155b15610a025760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610a2c57845460ff60401b1916600160401b1785555b61067187610e27565b60005460ff161580610a5657503360009081526001602052604090205460ff165b610a995760405162461bcd60e51b815260206004820152601460248201527314dd185ada5b99ce881b9bdd08185b1b1bddd95960621b6044820152606401610852565b68056bc75e2d63100000341015610ac25760405162461bcd60e51b815260040161085290611b3d565b610acc8282610fc1565b610b125760405162461bcd60e51b81526020600482015260176024820152765374616b696e673a20696e76616c6964207075626b657960481b6044820152606401610852565b336001600160a01b03167fc7abef7b73f049da6a9bc2349ba5066a39e316eabc9f671b6f9406aa9490a453838334604051610b4f93929190611b74565b60405180910390a25050565b610b63610d9f565b6000805460ff191660011781556040517f8a943acd5f4e6d3df7565a4a08a93f6b04cc31bb6c01ca4aef7abd6baf455ec39190a1565b610ba1610d9f565b6000805460ff191681556040517f2d35c8d348a345fd7b3b03b7cfcf7ad0b60c2d46742d5ca536342e4185becb079190a1565b60005460ff161580610bf557503360009081526001602052604090205460ff165b610c385760405162461bcd60e51b815260206004820152601460248201527314dd185ada5b99ce881b9bdd08185b1b1bddd95960621b6044820152606401610852565b68056bc75e2d63100000341015610c615760405162461bcd60e51b815260040161085290611b3d565b610c6b8484611115565b610cb15760405162461bcd60e51b81526020600482015260176024820152765374616b696e673a20696e76616c6964207075626b657960481b6044820152606401610852565b610cbd8484848461112b565b610d095760405162461bcd60e51b815260206004820152601a60248201527f5374616b696e673a20696e76616c6964207369676e61747572650000000000006044820152606401610852565b6000610d1585856111e3565b9050336001600160a01b03167fc7abef7b73f049da6a9bc2349ba5066a39e316eabc9f671b6f9406aa9490a4538234604051610d52929190611bad565b60405180910390a25050505050565b610d69610d9f565b6001600160a01b038116610d9357604051631e4fbdf760e01b815260006004820152602401610852565b610d9c81610e4e565b50565b33610dd17f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146107e35760405163118cdaa760e01b8152336004820152602401610852565b60006104ad610e07611230565b8360405161190160f01b8152600281019290925260228201526042902090565b610e2f61123f565b610d9c81611276565b610e4061123f565b610e4a828261127e565b5050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1028054606091600080516020611dad83398151915291610efe90611bcf565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2a90611bcf565b8015610f775780601f10610f4c57610100808354040283529160200191610f77565b820191906000526020600020905b815481529060010190602001808311610f5a57829003601f168201915b505050505091505090565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1038054606091600080516020611dad83398151915291610efe90611bcf565b6000602182146110135760405162461bcd60e51b815260206004820152601e60248201527f5374616b696e673a20696e76616c6964207075626b6579206c656e67746800006044820152606401610852565b8282600081811061102657611026611b11565b9050013560f81c60f81b6001600160f81b031916600260f81b148061107457508282600081811061105957611059611b11565b9050013560f81c60f81b6001600160f81b031916600360f81b145b6110c05760405162461bcd60e51b815260206004820152601e60248201527f5374616b696e673a20696e76616c6964207075626b65792070726566697800006044820152606401610852565b600183013560006110f5858583816110da576110da611b11565b919091013560f81c905083600060076401000003d0196112df565b905061110c8282600060076401000003d019611411565b95945050505050565b60006104aa83838360076401000003d019611411565b604080517fc9a51567e61a6d1a243a60e57bf4560e7e543694b79349ce2cba3a14fe21b04260208201529081018590526060810184905260009081906111739060800161048f565b905060006111b78286868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506114ca92505050565b5050905060006111c78888611517565b6001600160a01b03928316921691909114979650505050505050565b606060006111f5600184166002611c1f565b6040805160f89290921b6001600160f81b03191660208301526021808301969096528051808303909601865260419091019052509192915050565b600061123a61154d565b905090565b600080516020611dcd83398151915254600160401b900460ff166107e357604051631afcd79f60e31b815260040160405180910390fd5b610d6961123f565b61128661123f565b600080516020611dad8339815191527fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1026112c08482611c88565b50600381016112cf8382611c88565b5060008082556001909101555050565b60008560ff16600214806112f657508560ff166003145b61135c5760405162461bcd60e51b815260206004820152603160248201527f456c6c697074696343757276653a696e6e76616c696420636f6d7072657373656044820152700c8408a8640e0ded2dce840e0e4caccd2f607b1b6064820152608401610852565b6000828061136c5761136c611d48565b838061137a5761137a611d48565b85858061138957611389611d48565b888a0908848061139b5761139b611d48565b85806113a9576113a9611d48565b898a0989090890506113d28160046113c2866001611d5e565b6113cc9190611d71565b856115c1565b9050600060026113e560ff8a1684611d5e565b6113ef9190611d85565b15611403576113fe8285611d99565b611405565b815b98975050505050505050565b60008515806114205750818610155b80611429575084155b806114345750818510155b156114415750600061110c565b6000828061145157611451611d48565b86870990506000838061146657611466611d48565b88858061147557611475611d48565b8a8b0909905085156114a557838061148f5761148f611d48565b848061149d5761149d611d48565b878a09820890505b84156114bf5783806114b9576114b9611d48565b85820890505b149695505050505050565b600080600083516041036115045760208401516040850151606086015160001a6114f68882858561169a565b955095509550505050611510565b50508151600091506002905b9250925092565b60408051818152606081018252600091829190602082018180368337505050602081019485526040810193909352505051902090565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611578611769565b6115806117d3565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6000816000036116135760405162461bcd60e51b815260206004820152601e60248201527f456c6c697074696343757276653a206d6f64756c7573206973207a65726f00006044820152606401610852565b8360000361162357506000611693565b8260000361163357506001611693565b6001600160ff1b5b801561168f57838186161515870a85848509099150836002820486161515870a85848509099150836004820486161515870a85848509099150836008820486161515870a858485090991506010900461163b565b5090505b9392505050565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156116d5575060009150600390508261175f565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015611729573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166117555750600092506001915082905061175f565b9250600091508190505b9450945094915050565b6000600080516020611dad83398151915281611783610ebf565b80519091501561179b57805160209091012092915050565b815480156117aa579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b6000600080516020611dad833981519152816117ed610f82565b80519091501561180557805160209091012092915050565b600182015480156117aa579392505050565b6000806020838503121561182a57600080fd5b823567ffffffffffffffff8082111561184257600080fd5b818501915085601f83011261185657600080fd5b81358181111561186557600080fd5b8660208260051b850101111561187a57600080fd5b60209290920196919550909350505050565b6000806040838503121561189f57600080fd5b50508035926020909101359150565b80356001600160a01b03811681146118c557600080fd5b919050565b600080604083850312156118dd57600080fd5b6118e6836118ae565b9150602083013580151581146118fb57600080fd5b809150509250929050565b60006020828403121561191857600080fd5b6104aa826118ae565b6000815180845260005b818110156119475760208185018101518683018201520161192b565b506000602082860101526020601f19601f83011685010191505092915050565b60ff60f81b881681526000602060e0602084015261198860e084018a611921565b838103604085015261199a818a611921565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b818110156119ee578351835292840192918401916001016119d2565b50909c9b505050505050505050505050565b60008060408385031215611a1357600080fd5b611a1c836118ae565b9150611a2a602084016118ae565b90509250929050565b60008083601f840112611a4557600080fd5b50813567ffffffffffffffff811115611a5d57600080fd5b602083019150836020828501011115611a7557600080fd5b9250929050565b60008060208385031215611a8f57600080fd5b823567ffffffffffffffff811115611aa657600080fd5b611ab285828601611a33565b90969095509350505050565b60008060008060608587031215611ad457600080fd5b8435935060208501359250604085013567ffffffffffffffff811115611af957600080fd5b611b0587828801611a33565b95989497509550505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6020808252601d908201527f5374616b696e673a20696e73756666696369656e74206465706f736974000000604082015260600190565b604081528260408201528284606083013760006060848301015260006060601f19601f8601168301019050826020830152949350505050565b604081526000611bc06040830185611921565b90508260208301529392505050565b600181811c90821680611be357607f821691505b602082108103611c0357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60ff81811683821601908111156104ad576104ad611c09565b601f821115610448576000816000526020600020601f850160051c81016020861015611c615750805b601f850160051c820191505b81811015611c8057828155600101611c6d565b505050505050565b815167ffffffffffffffff811115611ca257611ca2611b27565b611cb681611cb08454611bcf565b84611c38565b602080601f831160018114611ceb5760008415611cd35750858301515b600019600386901b1c1916600185901b178555611c80565b600085815260208120601f198616915b82811015611d1a57888601518255948401946001909101908401611cfb565b5085821015611d385787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601260045260246000fd5b808201808211156104ad576104ad611c09565b600082611d8057611d80611d48565b500490565b600082611d9457611d94611d48565b500690565b818103818111156104ad576104ad611c0956fea16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a26469706673582212209ec1de4b1ad9f96937cdc63dd5d0c5e8f62af7eef29a7e85ce59896560b0f83264736f6c634300081800336080604052600c8054600160ff199182168117909255601f8054909116909117905534801561002d57600080fd5b5061256c8061003d6000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c8063916a17c61161008c578063ba414fa611610066578063ba414fa614610166578063c04062261461017e578063e20c9f7114610188578063fa7626d41461019057600080fd5b8063916a17c614610141578063b0464fdc14610156578063b5508aa91461015e57600080fd5b80631ed7831c146100d45780632ade3880146100f25780633e5e3c23146101075780633f7286f41461010f57806366d9a9a01461011757806385226c811461012c575b600080fd5b6100dc61019d565b6040516100e99190611d57565b60405180910390f35b6100fa6101ff565b6040516100e99190611df4565b6100dc610341565b6100dc6103a1565b61011f610401565b6040516100e99190611efa565b61013461056e565b6040516100e99190611f81565b61014961063e565b6040516100e99190611fe5565b610149610724565b61013461080a565b61016e6108da565b60405190151581526020016100e9565b610186610978565b005b6100dc610a74565b601f5461016e9060ff1681565b606060168054806020026020016040519081016040528092919081815260200182805480156101f557602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116101d7575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561033857600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b8282101561032157838290600052602060002001805461029490612056565b80601f01602080910402602001604051908101604052809291908181526020018280546102c090612056565b801561030d5780601f106102e25761010080835404028352916020019161030d565b820191906000526020600020905b8154815290600101906020018083116102f057829003601f168201915b505050505081526020019060010190610275565b505050508152505081526020019060010190610223565b50505050905090565b606060188054806020026020016040519081016040528092919081815260200182805480156101f5576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116101d7575050505050905090565b606060178054806020026020016040519081016040528092919081815260200182805480156101f5576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116101d7575050505050905090565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015610338578382906000526020600020906002020160405180604001604052908160008201805461045890612056565b80601f016020809104026020016040519081016040528092919081815260200182805461048490612056565b80156104d15780601f106104a6576101008083540402835291602001916104d1565b820191906000526020600020905b8154815290600101906020018083116104b457829003601f168201915b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561055657602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116105185790505b50505050508152505081526020019060010190610425565b6060601a805480602002602001604051908101604052809291908181526020016000905b828210156103385783829060005260206000200180546105b190612056565b80601f01602080910402602001604051908101604052809291908181526020018280546105dd90612056565b801561062a5780601f106105ff5761010080835404028352916020019161062a565b820191906000526020600020905b81548152906001019060200180831161060d57829003601f168201915b505050505081526020019060010190610592565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156103385760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561070c57602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116106ce5790505b50505050508152505081526020019060010190610662565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156103385760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156107f257602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116107b45790505b50505050508152505081526020019060010190610748565b60606019805480602002602001604051908101604052809291908181526020016000905b8282101561033857838290600052602060002001805461084d90612056565b80601f016020809104026020016040519081016040528092919081815260200182805461087990612056565b80156108c65780601f1061089b576101008083540402835291602001916108c6565b820191906000526020600020905b8154815290600101906020018083116108a957829003601f168201915b50505050508152602001906001019061082e565b60085460009060ff16156108f2575060085460ff1690565b604051630667f9d760e41b81526000805160206124f7833981519152600482018190526519985a5b195960d21b602483015260009163667f9d7090604401602060405180830381865afa15801561094d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109719190612090565b1415905090565b600060008051602061251783398151915260001c6001600160a01b0316634ad0bac96040518163ffffffff1660e01b81526004016060604051808303816000875af11580156109cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ef91906120c5565b5090915060009050816004811115610a0957610a0961210e565b14610a495760405162461bcd60e51b815260206004820152600c60248201526b1b9bc8189c9bd85918d85cdd60a21b604482015260640160405180910390fd5b610a51610ad4565b610a59610be1565b610a61610e46565b610a696113ba565b610a716117e8565b50565b606060158054806020026020016040519081016040528092919081815260200182805480156101f5576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116101d7575050505050905090565b601f805474cccccc000000000000000000000000000000000100610100600160a81b0319909116179081905560408051638da5cb5b60e01b815290516101009092046001600160a01b031691638da5cb5b916004808201926020929091908290030181865afa158015610b4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6f9190612124565b602060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550610bbf604051806040016040528060098152602001683b30b634b230ba37b960b91b815250611a5b565b602180546001600160a01b0319166001600160a01b0392909216919091179055565b6000806000806000806000601f60019054906101000a90046001600160a01b03166001600160a01b03166384b0196e6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610c3f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c679190810190612279565b9650965096509650965096509650610cb4876001600160f81b031916600f60f81b6040518060400160405280600e81526020016d4549502d373132206669656c647360901b815250611a6d565b610d0286604051806040016040528060078152602001665374616b696e6760c81b8152506040518060400160405280600c81526020016b4549502d373132206e616d6560a01b815250611ace565b610d4d85604051806040016040528060018152602001603160f81b8152506040518060400160405280600f81526020016e22a4a8169b9899103b32b939b4b7b760891b815250611ace565b610d7f84466040518060400160405280600f81526020016e1152540b4dcc4c8818da185a5b9259608a1b815250611b03565b610dd483601f60019054906101000a90046001600160a01b03166040518060400160405280601981526020017f4549502d37313220766572696679696e67436f6e747261637400000000000000815250611b38565b610e06826000801b6040518060400160405280600c81526020016b1152540b4dcc4c881cd85b1d60a21b815250611a6d565b610e3d81516000604051806040016040528060128152602001714549502d37313220657874656e73696f6e7360701b815250611b03565b50505050505050565b6020546040516303223eab60e11b81526001600160a01b0390911660048201526000805160206124f7833981519152906306447d5690602401600060405180830381600087803b158015610e9957600080fd5b505af1158015610ead573d6000803e3d6000fd5b50505050601f60019054906101000a90046001600160a01b03166001600160a01b031663c6a2aac86040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610f0157600080fd5b505af1158015610f15573d6000803e3d6000fd5b50505050610fc3601f60019054906101000a90046001600160a01b03166001600160a01b031663d146fd1b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f939190612346565b60405180604001604052806012815260200171185b1b1bdddb1a5cdd08191a5cd8589b195960721b815250611b6d565b60408051600180825281830190925260009160208083019080368337505060215482519293506001600160a01b03169183915060009061100557611005612368565b6001600160a01b039283166020918202929092010152601f5460405163117407e360e01b81526101009091049091169063117407e390611049908490600401611d57565b600060405180830381600087803b15801561106357600080fd5b505af1158015611077573d6000803e3d6000fd5b5050601f5460215460405163423b45bd60e11b81526001600160a01b03918216600482015261112f94506101009092041691506384768b7a90602401602060405180830381865afa1580156110d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f49190612346565b6040518060400160405280601a81526020017f76616c696461746f72206e6f7420696e20616c6c6f776c697374000000000000815250611b6d565b601f54604051633f0b1edf60e01b81526101009091046001600160a01b031690633f0b1edf90611163908490600401611d57565b600060405180830381600087803b15801561117d57600080fd5b505af1158015611191573d6000803e3d6000fd5b5050601f5460215460405163423b45bd60e11b81526001600160a01b03918216600482015261124294506101009092041691506384768b7a90602401602060405180830381865afa1580156111ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061120e9190612346565b604051806040016040528060168152602001751d985b1a59185d1bdc881a5b88185b1b1bdddb1a5cdd60521b815250611bcc565b601f60019054906101000a90046001600160a01b03166001600160a01b031663cf8e629a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561129257600080fd5b505af11580156112a6573d6000803e3d6000fd5b50505050611353601f60019054906101000a90046001600160a01b03166001600160a01b031663d146fd1b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611300573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113249190612346565b60405180604001604052806011815260200170185b1b1bdddb1a5cdd08195b98589b1959607a1b815250611bcc565b60008051602061251783398151915260001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561139f57600080fd5b505af11580156113b3573d6000803e3d6000fd5b5050505050565b7ff0e1605dd50ce33553290b778b0f53b2cde5e47a8794c0e7d2815e456e6da3b97f3b12d750493ed6b12b390447f6dd38f587af12ed04ab8d6858e818cf0c63607c7f044e0321a3e57de51e95f2b230b9e4ffed2318578baab1a80652234fe0115d1360006114298383611bff565b601f54604051630a5864bd60e21b815260048101869052602481018590529192506000916101009091046001600160a01b03169063296192f490604401602060405180830381865afa158015611483573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a79190612090565b6040516338d07aa960e21b81526004810187905260248101829052909150600090819081906000805160206124f78339815191529063e341eaa490604401606060405180830381865afa158015611502573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611526919061237e565b60408051602081018490529081018290526001600160f81b031960f885901b166060820152929550909350915060009060610160405160208183030381529060405290506000601f60019054906101000a90046001600160a01b03166001600160a01b03166311bcd8306040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e39190612090565b60215460405163c88a5e6d60e01b81526001600160a01b039091166004820152602481018290529091506000805160206124f78339815191529063c88a5e6d90604401600060405180830381600087803b15801561164057600080fd5b505af1158015611654573d6000803e3d6000fd5b5050505060008051602061251783398151915260001c6001600160a01b031663440ed10d6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156116a457600080fd5b505af11580156116b8573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fc7abef7b73f049da6a9bc2349ba5066a39e316eabc9f671b6f9406aa9490a45391506116fd908a9085906123bb565b60405180910390a260215460405163ca669fa760e01b81526001600160a01b0390911660048201526000805160206124f78339815191529063ca669fa790602401600060405180830381600087803b15801561175857600080fd5b505af115801561176c573d6000803e3d6000fd5b5050601f54604051633ad2f61160e21b81526101009091046001600160a01b0316925063eb4bd844915083906117aa908d908d9088906004016123dd565b6000604051808303818588803b1580156117c357600080fd5b505af11580156117d7573d6000803e3d6000fd5b505050505050505050505050505050565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166359bcddde6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561183d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118619190612090565b60215460405163c88a5e6d60e01b81526001600160a01b039091166004820152602481018290529091506000805160206124f78339815191529063c88a5e6d90604401600060405180830381600087803b1580156118be57600080fd5b505af11580156118d2573d6000803e3d6000fd5b5050505060008051602061251783398151915260001c6001600160a01b031663440ed10d6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561192257600080fd5b505af1158015611936573d6000803e3d6000fd5b50506021546040518481526001600160a01b0390911692508291507f510b11bb3f3c799b11307c01ab7db0d335683ef5b2da98f7697de744f465eacc9060200160405180910390a360215460405163ca669fa760e01b81526001600160a01b0390911660048201526000805160206124f78339815191529063ca669fa790602401600060405180830381600087803b1580156119d157600080fd5b505af11580156119e5573d6000803e3d6000fd5b5050601f5460215460405163455b2b4360e11b81526001600160a01b03918216600482018190526024820152610100909204169250638ab65686915083906044016000604051808303818588803b158015611a3f57600080fd5b505af1158015611a53573d6000803e3d6000fd5b505050505050565b6000611a6682611c4d565b5092915050565b604051630c1fa1ed60e41b81526000805160206124f78339815191529063c1fa1ed090611aa2908690869086906004016123dd565b60006040518083038186803b158015611aba57600080fd5b505afa158015610e3d573d6000803e3d6000fd5b6040516306decadb60e31b81526000805160206124f7833981519152906336f656d890611aa290869086908690600401612405565b6040516388b44c8560e01b81526000805160206124f7833981519152906388b44c8590611aa2908690869086906004016123dd565b604051632f2769d160e01b81526000805160206124f783398151915290632f2769d190611aa290869086908690600401612448565b60405163a34edc0360e01b81526000805160206124f78339815191529063a34edc0390611ba09085908590600401612474565b60006040518083038186803b158015611bb857600080fd5b505afa158015611a53573d6000803e3d6000fd5b604051637ba0480960e01b81526000805160206124f783398151915290637ba0480990611ba09085908590600401612474565b60606000611c1160018416600261248f565b6040805160f89290921b6001600160f81b0319166020830152602180830187905281518084039091018152604190920190529150505b92915050565b60008082604051602001611c6191906124b6565b60408051808303601f190181529082905280516020909101206001625e79b760e01b031982526004820181905291506000805160206124f78339815191529063ffa1864990602401602060405180830381865afa158015611cc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cea9190612124565b6040516318caf8e360e31b81529092506000805160206124f78339815191529063c657c71890611d2090859087906004016124d2565b600060405180830381600087803b158015611d3a57600080fd5b505af1158015611d4e573d6000803e3d6000fd5b50505050915091565b6020808252825182820181905260009190848201906040850190845b81811015611d985783516001600160a01b031683529284019291840191600101611d73565b50909695505050505050565b60005b83811015611dbf578181015183820152602001611da7565b50506000910152565b60008151808452611de0816020860160208601611da4565b601f01601f19169290920160200192915050565b602080825282518282018190526000919060409081850190600581811b8701840188860187805b85811015611ea457603f198b8503018752825180516001600160a01b031685528901518985018990528051898601819052908a0190606081881b870181019190870190855b81811015611e8e57605f19898503018352611e7c848651611dc8565b948e01949350918d0191600101611e60565b505050978a019794505091880191600101611e1b565b50919a9950505050505050505050565b60008151808452602080850194506020840160005b83811015611eef5781516001600160e01b03191687529582019590820190600101611ec9565b509495945050505050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b83811015611f7357888303603f1901855281518051878552611f4788860182611dc8565b91890151858303868b0152919050611f5f8183611eb4565b968901969450505090860190600101611f23565b509098975050505050505050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b82811015611fd857603f19888603018452611fc6858351611dc8565b94509285019290850190600101611faa565b5092979650505050505050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b83811015611f7357888303603f19018552815180516001600160a01b0316845287015187840187905261204387850182611eb4565b958801959350509086019060010161200e565b600181811c9082168061206a57607f821691505b60208210810361208a57634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156120a257600080fd5b5051919050565b80516001600160a01b03811681146120c057600080fd5b919050565b6000806000606084860312156120da57600080fd5b8351600581106120e957600080fd5b92506120f7602085016120a9565b9150612105604085016120a9565b90509250925092565b634e487b7160e01b600052602160045260246000fd5b60006020828403121561213657600080fd5b61213f826120a9565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561218557612185612146565b604052919050565b600082601f83011261219e57600080fd5b815167ffffffffffffffff8111156121b8576121b8612146565b6121cb601f8201601f191660200161215c565b8181528460208386010111156121e057600080fd5b6121f1826020830160208701611da4565b949350505050565b600082601f83011261220a57600080fd5b8151602067ffffffffffffffff82111561222657612226612146565b8160051b61223582820161215c565b928352848101820192828101908785111561224f57600080fd5b83870192505b8483101561226e57825182529183019190830190612255565b979650505050505050565b600080600080600080600060e0888a03121561229457600080fd5b87516001600160f81b0319811681146122ac57600080fd5b602089015190975067ffffffffffffffff808211156122ca57600080fd5b6122d68b838c0161218d565b975060408a01519150808211156122ec57600080fd5b6122f88b838c0161218d565b965060608a0151955061230d60808b016120a9565b945060a08a0151935060c08a015191508082111561232a57600080fd5b506123378a828b016121f9565b91505092959891949750929550565b60006020828403121561235857600080fd5b8151801515811461213f57600080fd5b634e487b7160e01b600052603260045260246000fd5b60008060006060848603121561239357600080fd5b835160ff811681146123a457600080fd5b602085015160409095015190969495509392505050565b6040815260006123ce6040830185611dc8565b90508260208301529392505050565b8381528260208201526060604082015260006123fc6060830184611dc8565b95945050505050565b6060815260006124186060830186611dc8565b828103602084015261242a8186611dc8565b9050828103604084015261243e8185611dc8565b9695505050505050565b6001600160a01b038481168252831660208201526060604082018190526000906123fc90830184611dc8565b82151581526040602082015260006121f16040830184611dc8565b60ff8181168382160190811115611c4757634e487b7160e01b600052601160045260246000fd5b600082516124c8818460208701611da4565b9190910192915050565b6001600160a01b03831681526040602082018190526000906121f190830184611dc856fe0000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12d885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12da2646970667358221220d2ab89ca1ceed708ae80eee7479b3f6ec33635031e5892a5b6b1cc2835c70c5864736f6c6343000818003360806040523480156200001157600080fd5b506200001c62000022565b620000d6565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000735760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d35780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b614dc380620000e66000396000f3fe60806040526004361061036b5760003560e01c80638532eb9f116101c6578063b4d5afd1116100f7578063c3d8ad6711610095578063d051c97d1161006f578063d051c97d14610af6578063d533b44514610b37578063f2fde38b14610b57578063f45cc7b814610b7757600080fd5b8063c3d8ad6714610a9a578063c4ab80bc14610aaf578063cf84c81814610acf57600080fd5b8063bff0e84d116100d1578063bff0e84d14610a27578063c21dda4f14610a47578063c26dfc0514610a5a578063c2f9b96814610a7a57600080fd5b8063b4d5afd1146109b2578063b521466d146109e7578063bb8590ad14610a0757600080fd5b8063a480ca7911610164578063afe821981161013e578063afe8219814610925578063afe8af9c14610945578063b187bd261461097b578063b2b2f5bd1461099057600080fd5b8063a480ca79146108b5578063a8a98962146108d5578063aaf1bc97146108f557600080fd5b806397b52062116101a057806397b520621461083e5780639a8a05921461085e578063a10ac97a14610871578063a32eb7c61461089357600080fd5b80638532eb9f146107b35780638da5cb5b146107d35780638dd9523c1461081057600080fd5b80633f4ba83a116102a0578063575420501161023e578063715018a611610218578063715018a61461074d57806378fe53071461076257806383d0cbd9146107895780638456cb591461079e57600080fd5b806357542050146106ca57806366a1eaf31461070b5780636739afca1461072b57600080fd5b806349cc3bf61161027a57806349cc3bf614610643578063500b19e71461065d57806354d26bba1461069557806355e2448e146106aa57600080fd5b80633f4ba83a146105cd5780633fd3b15e146105e2578063461ab4881461062357600080fd5b8063241b71bb1161030d57806330632e8b116102e757806330632e8b1461052557806336d219121461054557806336d853f91461056c5780633aa873301461058c57600080fd5b8063241b71bb1461046057806324278bbe146104905780632f32700e146104c057600080fd5b806310a5a7f71161034957806310a5a7f7146103d3578063110ff5f1146103f35780631d3eb6e31461042b57806323dbce501461044b57600080fd5b80630360d20f1461037057806306c3dc5f1461039c578063103ba701146103b1575b600080fd5b34801561037c57600080fd5b50610385600281565b60405160ff90911681526020015b60405180910390f35b3480156103a857600080fd5b50610385600381565b3480156103bd57600080fd5b506103d16103cc366004614064565b610b9e565b005b3480156103df57600080fd5b506103d16103ee36600461409f565b610bb2565b3480156103ff57600080fd5b50600154610413906001600160401b031681565b6040516001600160401b039091168152602001610393565b34801561043757600080fd5b506103d16104463660046140bc565b610c11565b34801561045757600080fd5b506103d1610d2c565b34801561046c57600080fd5b5061048061047b366004614130565b610d76565b6040519015158152602001610393565b34801561049c57600080fd5b506104806104ab36600461409f565b60056020526000908152604090205460ff1681565b3480156104cc57600080fd5b50604080518082018252600080825260209182015281518083018352600b546001600160401b0381168083526001600160a01b03600160401b909204821692840192835284519081529151169181019190915201610393565b34801561053157600080fd5b506103d1610540366004614149565b610d87565b34801561055157600080fd5b5060015461041390600160401b90046001600160401b031681565b34801561057857600080fd5b506103d161058736600461409f565b611028565b34801561059857600080fd5b506104136105a7366004614184565b60066020908152600092835260408084209091529082529020546001600160401b031681565b3480156105d957600080fd5b506103d1611039565b3480156105ee57600080fd5b506104136105fd366004614184565b60086020908152600092835260408084209091529082529020546001600160401b031681565b34801561062f57600080fd5b5061048061063e3660046141bd565b611074565b34801561064f57600080fd5b506000546103859060ff1681565b34801561066957600080fd5b5060025461067d906001600160a01b031681565b6040516001600160a01b039091168152602001610393565b3480156106a157600080fd5b506103d1611090565b3480156106b657600080fd5b50600b546001600160401b03161515610480565b3480156106d657600080fd5b506104136106e53660046141f9565b600a6020908152600092835260408084209091529082529020546001600160401b031681565b34801561071757600080fd5b506103d161072636600461422e565b6110da565b34801561073757600080fd5b5061074061147a565b6040516103939190614269565b34801561075957600080fd5b506103d161156e565b34801561076e57600080fd5b5060005461041390600160681b90046001600160401b031681565b34801561079557600080fd5b506103d1611582565b3480156107aa57600080fd5b506103d16115cc565b3480156107bf57600080fd5b506103d16107ce36600461431a565b611607565b3480156107df57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031661067d565b34801561081c57600080fd5b5061083061082b3660046143e9565b61171a565b604051908152602001610393565b34801561084a57600080fd5b506103d1610859366004614450565b61179b565b34801561086a57600080fd5b5046610413565b34801561087d57600080fd5b50610830600080516020614d2e83398151915281565b34801561089f57600080fd5b50610830600080516020614d6e83398151915281565b3480156108c157600080fd5b506103d16108d036600461449b565b6117ae565b3480156108e157600080fd5b506103d16108f036600461449b565b611836565b34801561090157600080fd5b5061048061091036600461409f565b60046020526000908152604090205460ff1681565b34801561093157600080fd5b506103d161094036600461409f565b611847565b34801561095157600080fd5b5061041361096036600461409f565b6009602052600090815260409020546001600160401b031681565b34801561098757600080fd5b506104806118a1565b34801561099c57600080fd5b50610830600080516020614d0e83398151915281565b3480156109be57600080fd5b506000546109d4906301000000900461ffff1681565b60405161ffff9091168152602001610393565b3480156109f357600080fd5b506103d1610a023660046144b6565b6118f7565b348015610a1357600080fd5b506103d1610a2236600461409f565b611908565b348015610a3357600080fd5b506103d1610a423660046144b6565b611919565b6103d1610a553660046144da565b61192a565b348015610a6657600080fd5b506000546109d490610100900461ffff1681565b348015610a8657600080fd5b506103d1610a9536600461409f565b611d02565b348015610aa657600080fd5b506103d1611d61565b348015610abb57600080fd5b506103d1610aca366004614450565b611dab565b348015610adb57600080fd5b5060005461041390600160281b90046001600160401b031681565b348015610b0257600080fd5b50610413610b11366004614184565b60076020908152600092835260408084209091529082529020546001600160401b031681565b348015610b4357600080fd5b506103d1610b5236600461409f565b611dbe565b348015610b6357600080fd5b506103d1610b7236600461449b565b611e18565b348015610b8357600080fd5b5060005461041390600160a81b90046001600160401b031681565b610ba6611e53565b610baf81611eae565b50565b610bba611e53565b610bda610bd5600080516020614d0e83398151915283611f4a565b611f93565b6040516001600160401b038216907fcd7910e1c5569d8433ce4ef8e5d51c1bdc03168f614b576da47dc3d2b51d033a90600090a250565b333014610c5d5760405162461bcd60e51b815260206004820152601560248201527427b6b734a837b93a30b61d1037b7363c9039b2b63360591b60448201526064015b60405180910390fd5b600154600b546001600160401b03908116600160401b9092041614610cbe5760405162461bcd60e51b815260206004820152601760248201527627b6b734a837b93a30b61d1037b7363c9031b1b430b4b760491b6044820152606401610c54565b600b54600160401b90046001600160a01b031615610d1e5760405162461bcd60e51b815260206004820152601e60248201527f4f6d6e69506f7274616c3a206f6e6c792063636861696e2073656e64657200006044820152606401610c54565b610d288282612039565b5050565b610d34611e53565b610d4b600080516020614d6e833981519152611f93565b6040517f3d0f9c56dac46156a2db0aa09ee7804770ad9fc9549d21023164f22d69475ed890600090a1565b6000610d81826121b3565b92915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b0316600081158015610dcc5750825b90506000826001600160401b03166001148015610de85750303b155b905081158015610df6575080155b15610e145760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610e3e57845460ff60401b1916600160401b1785555b610e53610e4e602088018861449b565b61221a565b610e6b610e66604088016020890161449b565b61222b565b610e83610e7e60a088016080890161409f565b6122cf565b610e9b610e9660e0880160c089016144b6565b612391565b610eb3610eae60c0880160a0890161409f565b612435565b610ecc610ec7610100880160e089016144b6565b61254e565b610ee6610ee161012088016101008901614064565b611eae565b610f0e610efb6101808801610160890161409f565b610f09610180890189614563565b6125ee565b610f1e606087016040880161409f565b6001805467ffffffffffffffff19166001600160401b0392909216919091179055610f4f608087016060880161409f565b600180546001600160401b0392909216600160401b026fffffffffffffffff000000000000000019909216919091179055610104610fae610f966080890160608a0161409f565b82610fa96101408b016101208c0161409f565b61291d565b610fd9610fc16080890160608a0161409f565b82610fd46101608b016101408c0161409f565b612992565b50831561102057845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b611030611e53565b610baf816122cf565b611041611e53565b6110496129fe565b6040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a1565b6000611089836110848585611f4a565b612a15565b9392505050565b611098611e53565b6110af600080516020614d0e833981519152612a9c565b6040517f4c48c7b71557216a3192842746bdfc381f98d7536d9eb1c6764f3b45e679482790600090a1565b600080516020614d6e8339815191526110f9606083016040840161409f565b611107826110848484611f4a565b156111495760405162461bcd60e51b815260206004820152601260248201527113db5b9a541bdc9d185b0e881c185d5cd95960721b6044820152606401610c54565b611151612b42565b3660006111626101008601866145ac565b909250905060408501600061117a826020890161409f565b600154909150600160401b90046001600160401b03166111a0604084016020850161409f565b6001600160401b0316146111f65760405162461bcd60e51b815260206004820152601b60248201527f4f6d6e69506f7274616c3a2077726f6e672063636861696e20494400000000006044820152606401610c54565b8261123a5760405162461bcd60e51b81526020600482015260146024820152734f6d6e69506f7274616c3a206e6f20786d73677360601b6044820152606401610c54565b6001600160401b03808216600090815260096020526040902054166112a15760405162461bcd60e51b815260206004820152601b60248201527f4f6d6e69506f7274616c3a20756e6b6e6f776e2076616c2073657400000000006044820152606401610c54565b6112a9612b8c565b6001600160401b0316816001600160401b0316101561130a5760405162461bcd60e51b815260206004820152601760248201527f4f6d6e69506f7274616c3a206f6c642076616c207365740000000000000000006044820152606401610c54565b61134e873561131d6101608a018a6145ac565b6001600160401b038086166000908152600a6020908152604080832060099092529091205490911660026003612bdc565b6113925760405162461bcd60e51b81526020600482015260156024820152744f6d6e69506f7274616c3a206e6f2071756f72756d60581b6044820152606401610c54565b6113bb87358386866113a86101208d018d6145ac565b6113b66101408f018f6145ac565b612d90565b6114075760405162461bcd60e51b815260206004820152601960248201527f4f6d6e69506f7274616c3a20696e76616c69642070726f6f66000000000000006044820152606401610c54565b60005b838110156114475761143f83868684818110611428576114286145f5565b905060200281019061143a919061460b565b612e0b565b60010161140a565b505050505061147560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b60606003805480602002602001604051908101604052809291908181526020016000905b828210156115655760008481526020908190206040805180820182526002860290920180546001600160401b0316835260018101805483518187028101870190945280845293949193858301939283018282801561154d57602002820191906000526020600020906000905b82829054906101000a90046001600160401b03166001600160401b03168152602001906008019060208260070104928301926001038202915080841161150a5790505b5050505050815250508152602001906001019061149e565b50505050905090565b611576611e53565b611580600061356f565b565b61158a611e53565b6115a1600080516020614d0e833981519152611f93565b6040517f5f335a4032d4cfb6aca7835b0c2225f36d4d9eaa4ed43ee59ed537e02dff6b3990600090a1565b6115d4611e53565b6115dc6135e0565b6040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a1565b33301461164e5760405162461bcd60e51b815260206004820152601560248201527427b6b734a837b93a30b61d1037b7363c9039b2b63360591b6044820152606401610c54565b600154600b546001600160401b03908116600160401b90920416146116af5760405162461bcd60e51b815260206004820152601760248201527627b6b734a837b93a30b61d1037b7363c9031b1b430b4b760491b6044820152606401610c54565b600b54600160401b90046001600160a01b03161561170f5760405162461bcd60e51b815260206004820152601e60248201527f4f6d6e69506f7274616c3a206f6e6c792063636861696e2073656e64657200006044820152606401610c54565b6114758383836125ee565b600254604051632376548f60e21b81526000916001600160a01b031690638dd9523c90611751908890889088908890600401614654565b602060405180830381865afa15801561176e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611792919061468c565b95945050505050565b6117a3611e53565b611475838383612992565b6117b6611e53565b60405147906001600160a01b0383169082156108fc029083906000818181858888f193505050501580156117ee573d6000803e3d6000fd5b50816001600160a01b03167f9dc46f23cfb5ddcad0ae7ea2be38d47fec07bb9382ec7e564efc69e036dd66ce8260405161182a91815260200190565b60405180910390a25050565b61183e611e53565b610baf8161222b565b61184f611e53565b61186a610bd5600080516020614d6e83398151915283611f4a565b6040516001600160401b038216907fab78810a0515df65f9f10bfbcb92d03d5df71d9fd3b9414e9ad831a5117d6daa90600090a250565b60006118f2600080516020614d2e833981519152600052600080516020614d4e8339815191526020527ffae9838a178d7f201aa98e2ce5340158edda60bb1e8f168f46503bf3e99f13be5460ff1690565b905090565b6118ff611e53565b610baf81612391565b611910611e53565b610baf81612435565b611921611e53565b610baf8161254e565b600080516020614d0e83398151915286611948826110848484611f4a565b1561198a5760405162461bcd60e51b815260206004820152601260248201527113db5b9a541bdc9d185b0e881c185d5cd95960721b6044820152606401610c54565b6001600160401b03881660009081526005602052604090205460ff166119f25760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a20756e737570706f727465642064657374000000006044820152606401610c54565b6001600160a01b038616611a485760405162461bcd60e51b815260206004820152601b60248201527f4f6d6e69506f7274616c3a206e6f20706f7274616c207863616c6c00000000006044820152606401610c54565b6000546001600160401b03600160281b90910481169084161115611aae5760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e69506f7274616c3a206761734c696d697420746f6f20686967680000006044820152606401610c54565b6000546001600160401b03600160681b90910481169084161015611b145760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a206761734c696d697420746f6f206c6f77000000006044820152606401610c54565b6000546301000000900461ffff16841115611b715760405162461bcd60e51b815260206004820152601a60248201527f4f6d6e69506f7274616c3a206461746120746f6f206c617267650000000000006044820152606401610c54565b60ff808816600081815260046020526040902054909116611bd45760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e69506f7274616c3a20756e737570706f727465642073686172640000006044820152606401610c54565b6000611be28a88888861171a565b905080341015611c345760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a20696e73756666696369656e7420666565000000006044820152606401610c54565b6001600160401b03808b166000908152600660209081526040808320868516845290915281208054600193919291611c6e918591166146bb565b82546101009290920a6001600160401b038181021990931691831602179091558b811660008181526006602090815260408083208886168085529252918290205491519190931693507fb7c8eb9d7a7fbcdab809ab7b8a7c41701eb3115e3fe99d30ff490d8552f72bfa90611cee9033908e908e908e908e908b906146e2565b60405180910390a450505050505050505050565b611d0a611e53565b611d2a611d25600080516020614d6e83398151915283611f4a565b612a9c565b6040516001600160401b038216907fc551305d9bd408be4327b7f8aba28b04ccf6b6c76925392d195ecf9cc764294d90600090a250565b611d69611e53565b611d80600080516020614d6e833981519152612a9c565b6040517f2cb9d71d4c31860b70e9b707c69aa2f5953e03474f00cfcfff205c4745f8287590600090a1565b611db3611e53565b61147583838361291d565b611dc6611e53565b611de1611d25600080516020614d0e83398151915283611f4a565b6040516001600160401b038216907f1ed9223556fb0971076c30172f1f00630efd313b6a05290a562aef95928e712590600090a250565b611e20611e53565b6001600160a01b038116611e4a57604051631e4fbdf760e01b815260006004820152602401610c54565b610baf8161356f565b33611e857f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146115805760405163118cdaa760e01b8152336004820152602401610c54565b60008160ff1611611f015760405162461bcd60e51b815260206004820152601a60248201527f4f6d6e69506f7274616c3a206e6f207a65726f206375746f66660000000000006044820152606401610c54565b6000805460ff191660ff83169081179091556040519081527f1683dc51426224f6e37a3b41dd5849e2db1bfe22366d1d913fa0ef6f757e828f906020015b60405180910390a150565b60008282604051602001611f7592919091825260c01b6001600160c01b031916602082015260280190565b60405160208183030381529060405280519060200120905092915050565b6000818152600080516020614d4e833981519152602081905260409091205460ff1615611ff55760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610c54565b600082815260208290526040808220805460ff191660011790555183917f0cb09dc71d57eeec2046f6854976717e4874a3cf2d6ddeddde337e5b6de6ba3191a25050565b6120416135f7565b3660005b828110156121ad5783838281811061205f5761205f6145f5565b9050602002810190612071919061472d565b6003805460018101825560009190915290925082906002027fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b016120b582826147f6565b50506120be4690565b6001600160401b03166120d4602084018461409f565b6001600160401b031614612122576001600560006120f5602086018661409f565b6001600160401b031681526020810191909152604001600020805460ff19169115159190911790556121a5565b60005b61213260208401846145ac565b90508110156121a35760016004600061214e60208701876145ac565b8581811061215e5761215e6145f5565b9050602002016020810190612173919061409f565b6001600160401b031681526020810191909152604001600020805460ff1916911515919091179055600101612125565b505b600101612045565b50505050565b600080516020614d2e8339815191526000908152600080516020614d4e83398151915260208190527ffae9838a178d7f201aa98e2ce5340158edda60bb1e8f168f46503bf3e99f13be5460ff16806110895750600092835260205250604090205460ff1690565b6122226136f6565b610baf8161373f565b6001600160a01b0381166122815760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e69506f7274616c3a206e6f207a65726f206665654f7261636c650000006044820152606401610c54565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527fd97bdb0db82b52a85aa07f8da78033b1d6e159d94f1e3cbd4109d946c3bcfd3290602001611f3f565b6000546001600160401b03600160681b9091048116908216116123345760405162461bcd60e51b815260206004820152601960248201527f4f6d6e69506f7274616c3a206e6f742061626f7665206d696e000000000000006044820152606401610c54565b600080546cffffffffffffffff00000000001916600160281b6001600160401b038416908102919091179091556040519081527f1153561ac5effc2926ba6c612f86a397c997bc43dfbfc718da08065be0c5fe4d90602001611f3f565b60008161ffff16116123e55760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a206e6f207a65726f206d61782073697a65000000006044820152606401610c54565b6000805464ffff0000001916630100000061ffff8416908102919091179091556040519081527f65923e04419dc810d0ea08a94a7f608d4c4d949818d95c3788f895e575dd206490602001611f3f565b6000816001600160401b03161161248e5760405162461bcd60e51b815260206004820152601b60248201527f4f6d6e69506f7274616c3a206e6f207a65726f206d696e2067617300000000006044820152606401610c54565b6000546001600160401b03600160281b9091048116908216106124f35760405162461bcd60e51b815260206004820152601960248201527f4f6d6e69506f7274616c3a206e6f742062656c6f77206d6178000000000000006044820152606401610c54565b6000805467ffffffffffffffff60681b1916600160681b6001600160401b038416908102919091179091556040519081527f8c852a6291aa436654b167353bca4a4b0c3d024c7562cb5082e7c869bddabf3e90602001611f3f565b60008161ffff16116125a25760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a206e6f207a65726f206d61782073697a65000000006044820152606401610c54565b6000805462ffff00191661010061ffff8416908102919091179091556040519081527f620bbea084306b66a8cc6b5b63830d6b3874f9d2438914e259ffd5065c33f7b090602001611f3f565b808061263c5760405162461bcd60e51b815260206004820152601960248201527f4f6d6e69506f7274616c3a206e6f2076616c696461746f7273000000000000006044820152606401610c54565b6001600160401b0380851660009081526009602052604090205416156126a45760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e69506f7274616c3a206475706c69636174652076616c207365740000006044820152606401610c54565b604080518082018252600080825260208083018290526001600160401b0388168252600a9052918220825b8481101561287c578686828181106126e9576126e96145f5565b9050604002018036038101906126ff919061491e565b80519093506001600160a01b03166127595760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e69506f7274616c3a206e6f207a65726f2076616c696461746f720000006044820152606401610c54565b600083602001516001600160401b0316116127b65760405162461bcd60e51b815260206004820152601960248201527f4f6d6e69506f7274616c3a206e6f207a65726f20706f776572000000000000006044820152606401610c54565b82516001600160a01b03166000908152602083905260409020546001600160401b0316156128265760405162461bcd60e51b815260206004820152601f60248201527f4f6d6e69506f7274616c3a206475706c69636174652076616c696461746f72006044820152606401610c54565b602083015161283590856146bb565b60208481015185516001600160a01b03166000908152918590526040909120805467ffffffffffffffff19166001600160401b0390921691909117905593506001016126cf565b506001600160401b038781166000818152600960205260408120805467ffffffffffffffff191687851617905554600160a81b900490911610156128e0576000805467ffffffffffffffff60a81b1916600160a81b6001600160401b038a16021790555b6040516001600160401b038816907f3a7c2f997a87ba92aedaecd1127f4129cae1283e2809ebf5304d321b943fd10790600090a250505050505050565b6001600160401b03838116600081815260076020908152604080832087861680855290835292819020805467ffffffffffffffff191695871695861790555193845290927f8647aae68c8456a1dcbfaf5eaadc94278ae423526d3f09c7b972bff7355d55c791015b60405180910390a3505050565b6001600160401b03838116600081815260086020908152604080832087861680855290835292819020805467ffffffffffffffff191695871695861790555193845290927fe070f08cae8464c91238e8cbea64ccee5e7b48dd79a843f144e3721ee6bdd9b59101612985565b611580600080516020614d2e833981519152612a9c565b600080516020614d2e8339815191526000908152600080516020614d4e83398151915260208190527ffae9838a178d7f201aa98e2ce5340158edda60bb1e8f168f46503bf3e99f13be5460ff1680612a7b575060008481526020829052604090205460ff165b80612a94575060008381526020829052604090205460ff165b949350505050565b6000818152600080516020614d4e833981519152602081905260409091205460ff16612b015760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610c54565b600082815260208290526040808220805460ff191690555183917fd05bfc2250abb0f8fd265a54c53a24359c5484af63cad2e4ce87c78ab751395a91a25050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00805460011901612b8657604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b6000805460ff8116600160a81b9091046001600160401b031611612bb05750600190565b600054612bd19060ff811690600160a81b90046001600160401b031661497a565b6118f29060016146bb565b6000803660005b88811015612d7d57898982818110612bfd57612bfd6145f5565b9050602002810190612c0f919061472d565b91508015612cc357368a8a612c2560018561499a565b818110612c3457612c346145f5565b9050602002810190612c46919061472d565b9050612c55602082018261449b565b6001600160a01b0316612c6b602085018561449b565b6001600160a01b031611612cc15760405162461bcd60e51b815260206004820152601f60248201527f51756f72756d3a2073696773206e6f7420646564757065642f736f72746564006044820152606401610c54565b505b612ccd828c613747565b612d195760405162461bcd60e51b815260206004820152601960248201527f51756f72756d3a20696e76616c6964207369676e6174757265000000000000006044820152606401610c54565b876000612d29602085018561449b565b6001600160a01b03168152602081019190915260400160002054612d56906001600160401b0316846146bb565b9250612d64838888886137bb565b15612d755760019350505050612d85565b600101612be3565b506000925050505b979650505050505050565b60408051600180825281830190925260009182919060208083019080368337019050509050612dcb86868686612dc68d8d6137f3565b6138c0565b81600081518110612dde57612dde6145f5565b602002602001018181525050612dfd818b612df88c613b21565b613b39565b9a9950505050505050505050565b6000612e1a602084018461409f565b90506000612e2b602084018461409f565b90506000612e3f604085016020860161409f565b90506000612e53606086016040870161409f565b9050466001600160401b0316836001600160401b03161480612e7c57506001600160401b038316155b612ec85760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a2077726f6e67206465737420636861696e000000006044820152606401610c54565b6001600160401b0380851660009081526007602090815260408083208685168452909152902054612efb911660016146bb565b6001600160401b0316816001600160401b031614612f5b5760405162461bcd60e51b815260206004820152601860248201527f4f6d6e69506f7274616c3a2077726f6e67206f666673657400000000000000006044820152606401610c54565b612f6b6060870160408801614064565b60ff16600460ff161480612f93575060ff8216612f8e6060880160408901614064565b60ff16145b612fdf5760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a2077726f6e6720636f6e66206c6576656c000000006044820152606401610c54565b612fef608087016060880161409f565b6001600160401b03858116600090815260086020908152604080832087851684529091529020549181169116101561306f57613031608087016060880161409f565b6001600160401b03858116600090815260086020908152604080832087851684529091529020805467ffffffffffffffff1916929091169190911790555b6001600160401b0380851660009081526007602090815260408083208685168452909152812080546001939192916130a9918591166146bb565b92506101000a8154816001600160401b0302191690836001600160401b03160217905550306001600160a01b03168560800160208101906130ea919061449b565b6001600160a01b0316036131c457806001600160401b0316826001600160401b0316856001600160401b03167f8277cab1f0fa69b34674f64a7d43f242b0bacece6f5b7e8652f1e0d88a9b873b600033600060405160240161317d906020808252601e908201527f4f6d6e69506f7274616c3a206e6f207863616c6c20746f20706f7274616c0000604082015260600190565b60408051601f198184030181529181526020820180516001600160e01b031662461bcd60e51b179052516131b494939291906149fd565b60405180910390a4505050505050565b6000806131d760a088016080890161449b565b6001600160a01b031614905080156133205760006131f860a0880188614a39565b61320191614a7f565b600154909150600160401b90046001600160401b031661322460208a018a61409f565b6001600160401b0316148015613252575060006132476080890160608a0161449b565b6001600160a01b0316145b801561327357506000613268602089018961409f565b6001600160401b0316145b8015613298575061010461328d6040890160208a0161409f565b6001600160401b0316145b80156132ce57506001600160e01b03198116638532eb9f60e01b14806132ce57506001600160e01b03198116631d3eb6e360e01b145b61331a5760405162461bcd60e51b815260206004820152601b60248201527f4f6d6e69506f7274616c3a20696e76616c69642073797363616c6c00000000006044820152606401610c54565b50613404565b600154600160401b90046001600160401b0316613340602089018961409f565b6001600160401b03161415801561337057506000613364608088016060890161449b565b6001600160a01b031614155b801561339257506000613386602088018861409f565b6001600160401b031614155b80156133b857506101046133ac604088016020890161409f565b6001600160401b031614155b6134045760405162461bcd60e51b815260206004820152601960248201527f4f6d6e69506f7274616c3a20696e76616c6964207863616c6c000000000000006044820152606401610c54565b604080518082019091526001600160401b03861681526020810161342e6080890160608a0161449b565b6001600160a01b039081169091528151600b8054602090940151909216600160401b026001600160e01b03199093166001600160401b039091161791909117905560008080836134bb576134b661348b60a08b0160808c0161449b565b61349b60e08c0160c08d0161409f565b6001600160401b03166134b160a08d018d614a39565b613b4f565b6134d0565b6134d06134cb60a08b018b614a39565b613c0f565b600b80546001600160e01b0319169055919450925090506000836134f45782613505565b604051806020016040528060008152505b9050856001600160401b0316876001600160401b03168a6001600160401b03167f8277cab1f0fa69b34674f64a7d43f242b0bacece6f5b7e8652f1e0d88a9b873b8533898760405161355a94939291906149fd565b60405180910390a45050505050505050505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b611580600080516020614d2e833981519152611f93565b6000805b6003548110156136e95760038181548110613618576136186145f5565b9060005260206000209060020201915061362f4690565b82546001600160401b039081169116146136695781546001600160401b03166000908152600560205260409020805460ff191690556136e1565b60005b60018301548110156136df57600060046000856001018481548110613693576136936145f5565b6000918252602080832060048304015460039092166008026101000a9091046001600160401b031683528201929092526040019020805460ff191691151591909117905560010161366c565b505b6001016135fb565b50610baf60036000613fc9565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661158057604051631afcd79f60e31b815260040160405180910390fd5b611e206136f6565b6000613756602084018461449b565b6001600160a01b03166137aa836137706020870187614a39565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613ca692505050565b6001600160a01b0316149392505050565b60006137d360ff84166001600160401b038616614766565b6137e960ff84166001600160401b038816614766565b1195945050505050565b60606000826001600160401b0381111561380f5761380f614750565b604051908082528060200260200182016040528015613838578160200160208202803683370190505b50905060005b838110156138b857613893600286868481811061385d5761385d6145f5565b905060200281019061386f919061460b565b60405160200161387f9190614af4565b604051602081830303815290604052613cd0565b8282815181106138a5576138a56145f5565b602090810291909101015260010161383e565b509392505050565b805160009085846138d2816001614bc3565b6138dc8385614bc3565b146138fa57604051631a8a024960e11b815260040160405180910390fd5b6000816001600160401b0381111561391457613914614750565b60405190808252806020026020018201604052801561393d578160200160208202803683370190505b5090506000806000805b85811015613a8a57600088851061398257858461396381614bd6565b955081518110613975576139756145f5565b60200260200101516139a8565b8a8561398d81614bd6565b96508151811061399f5761399f6145f5565b60200260200101515b905060008d8d848181106139be576139be6145f5565b90506020020160208101906139d39190614bef565b613a00578f8f856139e381614bd6565b96508181106139f4576139f46145f5565b90506020020135613a57565b898610613a31578685613a1281614bd6565b965081518110613a2457613a246145f5565b6020026020010151613a57565b8b86613a3c81614bd6565b975081518110613a4e57613a4e6145f5565b60200260200101515b9050613a638282613d07565b878481518110613a7557613a756145f5565b60209081029190910101525050600101613947565b508415613adc57858114613ab157604051631a8a024960e11b815260040160405180910390fd5b836001860381518110613ac657613ac66145f5565b6020026020010151975050505050505050611792565b8615613af55788600081518110613ac657613ac66145f5565b8c8c6000818110613b0857613b086145f5565b9050602002013597505050505050505095945050505050565b6000610d8160018360405160200161387f9190614c11565b600082613b468584613d36565b14949350505050565b600060606000805a9050600080613bd28960008060019054906101000a900461ffff168b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508e6001600160a01b0316613d7190949392919063ffffffff16565b9150915060005a9050613be6603f8b614c96565b8111613bee57fe5b8282613bfa838761499a565b965096509650505050505b9450945094915050565b600060606000805a9050600080306001600160a01b03168888604051613c36929190614cb8565b6000604051808303816000865af19150503d8060008114613c73576040519150601f19603f3d011682016040523d82523d6000602084013e613c78565b606091505b50915091505a613c88908461499a565b925081613c9757805160208201fd5b909450925090505b9250925092565b600080600080613cb68686613dfb565b925092509250613cc68282613e45565b5090949350505050565b60008282604051602001613ce5929190614cc8565b60408051601f1981840301815282825280516020918201209083015201611f75565b6000818310613d23576000828152602084905260409020611089565b6000838152602083905260409020611089565b600081815b84518110156138b857613d6782868381518110613d5a57613d5a6145f5565b6020026020010151613d07565b9150600101613d3b565b6000606060008060008661ffff166001600160401b03811115613d9657613d96614750565b6040519080825280601f01601f191660200182016040528015613dc0576020820181803683370190505b5090506000808751602089018b8e8ef191503d925086831115613de1578692505b828152826000602083013e90999098509650505050505050565b60008060008351604103613e355760208401516040850151606086015160001a613e2788828585613efe565b955095509550505050613c9f565b5050815160009150600290613c9f565b6000826003811115613e5957613e59614cf7565b03613e62575050565b6001826003811115613e7657613e76614cf7565b03613e945760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115613ea857613ea8614cf7565b03613ec95760405163fce698f760e01b815260048101829052602401610c54565b6003826003811115613edd57613edd614cf7565b03610d28576040516335e2f38360e21b815260048101829052602401610c54565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115613f395750600091506003905082613c05565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015613f8d573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116613fb957506000925060019150829050613c05565b9760009750879650945050505050565b5080546000825560020290600052602060002090810190610baf91905b8082111561401557805467ffffffffffffffff19168155600061400c6001830182614019565b50600201613fe6565b5090565b508054600082556003016004900490600052602060002090810190610baf91905b80821115614015576000815560010161403a565b803560ff8116811461405f57600080fd5b919050565b60006020828403121561407657600080fd5b6110898261404e565b6001600160401b0381168114610baf57600080fd5b803561405f8161407f565b6000602082840312156140b157600080fd5b81356110898161407f565b600080602083850312156140cf57600080fd5b82356001600160401b03808211156140e657600080fd5b818501915085601f8301126140fa57600080fd5b81358181111561410957600080fd5b8660208260051b850101111561411e57600080fd5b60209290920196919550909350505050565b60006020828403121561414257600080fd5b5035919050565b60006020828403121561415b57600080fd5b81356001600160401b0381111561417157600080fd5b82016101a0818503121561108957600080fd5b6000806040838503121561419757600080fd5b82356141a28161407f565b915060208301356141b28161407f565b809150509250929050565b600080604083850312156141d057600080fd5b8235915060208301356141b28161407f565b80356001600160a01b038116811461405f57600080fd5b6000806040838503121561420c57600080fd5b82356142178161407f565b9150614225602084016141e2565b90509250929050565b60006020828403121561424057600080fd5b81356001600160401b0381111561425657600080fd5b8201610180818503121561108957600080fd5b600060208083018184528085518083526040925060408601915060408160051b8701018488016000805b8481101561430b57898403603f19018652825180516001600160401b039081168652908901518986018990528051898701819052908a0191849160608801905b808410156142f557845183168252938c019360019390930192908c01906142d3565b50988b0198965050509288019250600101614293565b50919998505050505050505050565b60008060006040848603121561432f57600080fd5b833561433a8161407f565b925060208401356001600160401b038082111561435657600080fd5b818601915086601f83011261436a57600080fd5b81358181111561437957600080fd5b8760208260061b850101111561438e57600080fd5b6020830194508093505050509250925092565b60008083601f8401126143b357600080fd5b5081356001600160401b038111156143ca57600080fd5b6020830191508360208285010111156143e257600080fd5b9250929050565b600080600080606085870312156143ff57600080fd5b843561440a8161407f565b935060208501356001600160401b0381111561442557600080fd5b614431878288016143a1565b90945092505060408501356144458161407f565b939692955090935050565b60008060006060848603121561446557600080fd5b83356144708161407f565b925060208401356144808161407f565b915060408401356144908161407f565b809150509250925092565b6000602082840312156144ad57600080fd5b611089826141e2565b6000602082840312156144c857600080fd5b813561ffff8116811461108957600080fd5b60008060008060008060a087890312156144f357600080fd5b86356144fe8161407f565b955061450c6020880161404e565b945061451a604088016141e2565b935060608701356001600160401b0381111561453557600080fd5b61454189828a016143a1565b90945092505060808701356145558161407f565b809150509295509295509295565b6000808335601e1984360301811261457a57600080fd5b8301803591506001600160401b0382111561459457600080fd5b6020019150600681901b36038213156143e257600080fd5b6000808335601e198436030181126145c357600080fd5b8301803591506001600160401b038211156145dd57600080fd5b6020019150600581901b36038213156143e257600080fd5b634e487b7160e01b600052603260045260246000fd5b6000823560de1983360301811261462157600080fd5b9190910192915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60006001600160401b0380871683526060602084015261467860608401868861462b565b915080841660408401525095945050505050565b60006020828403121561469e57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6001600160401b038181168382160190808211156146db576146db6146a5565b5092915050565b6001600160a01b0387811682528616602082015260a06040820181905260009061470f908301868861462b565b6001600160401b039490941660608301525060800152949350505050565b60008235603e1983360301811261462157600080fd5b60008135610d818161407f565b634e487b7160e01b600052604160045260246000fd5b8082028115828204841417610d8157610d816146a5565b600160401b82111561479157614791614750565b8054828255808310156114755760008260005260206000206003850160021c81016003840160021c8201915060188660031b1680156147e1576000198083018054828460200360031b1c16815550505b505b81811015611020578281556001016147e3565b81356148018161407f565b815467ffffffffffffffff19166001600160401b0391821617825560019081830160208581013536879003601e1901811261483b57600080fd5b860180358481111561484c57600080fd5b6020820194508060051b360385131561486457600080fd5b61486e818561477d565b60009384526020842093600282901c92505b828110156148d7576000805b60048110156148cb576148be6148a189614743565b6001600160401b03908116600684901b90811b91901b1984161790565b978601979150880161488c565b50858201558601614880565b506003198116808203818314614912576000805b8281101561490c576148ff6148a18a614743565b98870198915089016148eb565b50868501555b50505050505050505050565b60006040828403121561493057600080fd5b604051604081018181106001600160401b038211171561495257614952614750565b60405261495e836141e2565b8152602083013561496e8161407f565b60208201529392505050565b6001600160401b038281168282160390808211156146db576146db6146a5565b81810381811115610d8157610d816146a5565b60005b838110156149c85781810151838201526020016149b0565b50506000910152565b600081518084526149e98160208601602086016149ad565b601f01601f19169290920160200192915050565b8481526001600160a01b03841660208201528215156040820152608060608201819052600090614a2f908301846149d1565b9695505050505050565b6000808335601e19843603018112614a5057600080fd5b8301803591506001600160401b03821115614a6a57600080fd5b6020019150368190038213156143e257600080fd5b6001600160e01b03198135818116916004851015614aa75780818660040360031b1b83161692505b505092915050565b6000808335601e19843603018112614ac657600080fd5b83016020810192503590506001600160401b03811115614ae557600080fd5b8036038213156143e257600080fd5b6020815260008235614b058161407f565b6001600160401b03808216602085015260208501359150614b258261407f565b808216604085015260408501359150614b3d8261407f565b166060838101919091526001600160a01b0390614b5b9085016141e2565b166080830152614b6d608084016141e2565b6001600160a01b03811660a084015250614b8a60a0840184614aaf565b60e060c0850152614ba06101008501828461462b565b915050614baf60c08501614094565b6001600160401b03811660e08501526138b8565b80820180821115610d8157610d816146a5565b600060018201614be857614be86146a5565b5060010190565b600060208284031215614c0157600080fd5b8135801515811461108957600080fd5b60c081018235614c208161407f565b6001600160401b039081168352602084013590614c3c8261407f565b808216602085015260ff614c526040870161404e565b16604085015260608501359150614c688261407f565b9081166060840152608084013590614c7f8261407f565b16608083015260a092830135929091019190915290565b600082614cb357634e487b7160e01b600052601260045260246000fd5b500490565b8183823760009101908152919050565b60ff60f81b8360f81b16815260008251614ce98160018501602087016149ad565b919091016001019392505050565b634e487b7160e01b600052602160045260246000fdfea06a0c1264badca141841b5f52470407dac9adaaa539dd445540986341b73a6876e8952e4b09b8d505aa08998d716721a1dbf0884ac74202e33985da1ed005e9ff37105740f03695c8f3597f3aff2b92fbe1c80abea3c28731ecff2efd693400feccba1cfc4544bf9cd83b76f36ae5c464750b6c43f682e26744ee21ec31fc1ea2646970667358221220454d7eedaed3573a1dadea3ef0737446649e36b76c0557c768966f395a0de7d164736f6c63430008180033608060405234801561001057600080fd5b5061001961001e565b6100d0565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161561006e5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100cd5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6118a3806100df6000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c8063715018a611610066578063715018a6146101395780638da5cb5b14610141578063ada867981461017b578063c4d66de81461019b578063f2fde38b146101ae57600080fd5b80630f560cd7146100a357806321d93090146100c157806347153cbf146100ec578063473d04521461010157806352d482e214610126575b600080fd5b6100ab6101c1565b6040516100b891906110e6565b60405180910390f35b6100d46100cf36600461114a565b610462565b6040516001600160401b0390911681526020016100b8565b6100ff6100fa366004611163565b61049f565b005b61011461010f3660046111b9565b6104b3565b6040516100b8969594939291906111d6565b6100ff610134366004611221565b610597565b6100ff6105ff565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546040516001600160a01b0390911681526020016100b8565b61018e6101893660046111b9565b610613565b6040516100b89190611295565b6100ff6101a93660046112bd565b6107d8565b6100ff6101bc3660046112bd565b6108e6565b60008054606091906001600160401b038111156101e0576101e06112da565b60405190808252806020026020018201604052801561024957816020015b6040805160e081018252600080825260208083018290529282018190526060808301829052608083019190915260a0820181905260c082015282526000199092019101816101fe5790505b50905060005b6000546001600160401b038216101561045c576001600080836001600160401b031681548110610281576102816112f0565b6000918252602080832060048304015460039092166008026101000a9091046001600160401b039081168452838201949094526040928301909120825160e08101845281546001600160a01b0381168252600160a01b9004851681840152600182015480861682860152600160401b810486166060830152600160801b90049094166080850152600281018054845181850281018501909552808552919360a086019390929083018282801561038857602002820191906000526020600020906000905b82829054906101000a90046001600160401b03166001600160401b0316815260200190600801906020826007010492830192600103820291508084116103455790505b505050505081526020016003820180546103a190611306565b80601f01602080910402602001604051908101604052809291908181526020018280546103cd90611306565b801561041a5780601f106103ef5761010080835404028352916020019161041a565b820191906000526020600020905b8154815290600101906020018083116103fd57829003601f168201915b50505050508152505082826001600160401b03168151811061043e5761043e6112f0565b602002602001018190525080806104549061133a565b91505061024f565b50919050565b6000818154811061047257600080fd5b9060005260206000209060049182820401919006600802915054906101000a90046001600160401b031681565b6104a7610926565b6104b081610981565b50565b60016020819052600091825260409091208054918101546003820180546001600160a01b038516946001600160401b03600160a01b90910481169484821694600160401b8104831694600160801b9091049092169290919061051490611306565b80601f016020809104026020016040519081016040528092919081815260200182805461054090611306565b801561058d5780601f106105625761010080835404028352916020019161058d565b820191906000526020600020905b81548152906001019060200180831161057057829003601f168201915b5050505050905086565b61059f610926565b60005b6001600160401b0381168211156105fa576105e88383836001600160401b03168181106105d1576105d16112f0565b90506020028101906105e3919061136e565b610981565b806105f28161133a565b9150506105a2565b505050565b610607610926565b6106116000610ef6565b565b6040805160e0810182526000808252602082018190529181018290526060808201839052608082019290925260a0810182905260c08101919091526001600160401b03808316600090815260016020818152604092839020835160e08101855281546001600160a01b0381168252600160a01b90048616818401529281015480861684860152600160401b810486166060850152600160801b9004909416608083015260028401805484518184028101840190955280855292949360a0860193909283018282801561073657602002820191906000526020600020906000905b82829054906101000a90046001600160401b03166001600160401b0316815260200190600801906020826007010492830192600103820291508084116106f35790505b5050505050815260200160038201805461074f90611306565b80601f016020809104026020016040519081016040528092919081815260200182805461077b90611306565b80156107c85780601f1061079d576101008083540402835291602001916107c8565b820191906000526020600020905b8154815290600101906020018083116107ab57829003601f168201915b5050505050815250509050919050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b031660008115801561081d5750825b90506000826001600160401b031660011480156108395750303b155b905081158015610847575080155b156108655760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561088f57845460ff60401b1916600160401b1785555b61089886610f67565b83156108de57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b6108ee610926565b6001600160a01b03811661091d57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6104b081610ef6565b336109587f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146106115760405163118cdaa760e01b8152336004820152602401610914565b600061099060208301836112bd565b6001600160a01b0316036109e65760405162461bcd60e51b815260206004820152601960248201527f506f7274616c52656769737472793a207a65726f2061646472000000000000006044820152606401610914565b60006109f860408301602084016111b9565b6001600160401b031611610a4e5760405162461bcd60e51b815260206004820152601d60248201527f506f7274616c52656769737472793a207a65726f20636861696e2049440000006044820152606401610914565b6000610a6060808301606084016111b9565b6001600160401b031611610ab65760405162461bcd60e51b815260206004820152601d60248201527f506f7274616c52656769737472793a207a65726f20696e74657276616c0000006044820152606401610914565b677fffffffffffffff610acf60a08301608084016111b9565b6001600160401b03161115610b265760405162461bcd60e51b815260206004820181905260248201527f506f7274616c52656769737472793a20706572696f6420746f6f206c617267656044820152606401610914565b6000610b3860a08301608084016111b9565b6001600160401b031611610b8e5760405162461bcd60e51b815260206004820152601b60248201527f506f7274616c52656769737472793a207a65726f20706572696f6400000000006044820152606401610914565b6000610b9d60c083018361138e565b905011610bec5760405162461bcd60e51b815260206004820152601760248201527f506f7274616c52656769737472793a206e6f206e616d650000000000000000006044820152606401610914565b6000610bfb60a08301836113db565b905011610c4a5760405162461bcd60e51b815260206004820152601960248201527f506f7274616c52656769737472793a206e6f20736861726473000000000000006044820152606401610914565b6000600181610c5f60408501602086016111b9565b6001600160401b031681526020810191909152604001600020546001600160a01b031614610ccf5760405162461bcd60e51b815260206004820152601b60248201527f506f7274616c52656769737472793a20616c72656164792073657400000000006044820152606401610914565b60005b610cdf60a08301836113db565b9050816001600160401b03161015610dae576000610d0060a08401846113db565b836001600160401b0316818110610d1957610d196112f0565b9050602002016020810190610d2e91906111b9565b90508060ff16816001600160401b0316148015610d4f5750610d4f81610f78565b610d9b5760405162461bcd60e51b815260206004820152601d60248201527f506f7274616c52656769737472793a20696e76616c69642073686172640000006044820152606401610914565b5080610da68161133a565b915050610cd2565b508060016000610dc460408401602085016111b9565b6001600160401b031681526020810191909152604001600020610de7828261168b565b5060009050610dfc60408301602084016111b9565b815460018101835560009283526020928390206004820401805460039092166008026101000a6001600160401b03818102199093169390921691909102919091179055610e4b908201826112bd565b6001600160a01b0316610e6460408301602084016111b9565b6001600160401b03167fb08d1911b978b0c040fa5e01711aa326770a97c5f00039d45e7ae8dec7409e73610e9e60608501604086016111b9565b610eae60808601606087016111b9565b610ebe60a08701608088016111b9565b610ecb60a08801886113db565b610ed860c08a018a61138e565b604051610eeb97969594939291906117d4565b60405180910390a350565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b610f6f610f95565b6104b081610fde565b600060ff821660011480610f8f575060ff82166004145b92915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661061157604051631afcd79f60e31b815260040160405180910390fd5b6108ee610f95565b6000815180845260005b8181101561100c57602081850181015186830182015201610ff0565b506000602082860101526020601f19601f83011685010191505092915050565b600060e0830160018060a01b0383511684526020808401516001600160401b03808216602088015280604087015116604088015280606087015116606088015280608087015116608088015260a0860151915060e060a088015283825180865261010089019150602084019550600093505b808410156110c05785518316825294840194600193909301929084019061109e565b5060c0870151945087810360c08901526110da8186610fe6565b98975050505050505050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101561113d57603f1988860301845261112b85835161102c565b9450928501929085019060010161110f565b5092979650505050505050565b60006020828403121561115c57600080fd5b5035919050565b60006020828403121561117557600080fd5b81356001600160401b0381111561118b57600080fd5b820160e0818503121561119d57600080fd5b9392505050565b6001600160401b03811681146104b057600080fd5b6000602082840312156111cb57600080fd5b813561119d816111a4565b6001600160a01b03871681526001600160401b038681166020830152858116604083015284811660608301528316608082015260c060a082018190526000906110da90830184610fe6565b6000806020838503121561123457600080fd5b82356001600160401b038082111561124b57600080fd5b818501915085601f83011261125f57600080fd5b81358181111561126e57600080fd5b8660208260051b850101111561128357600080fd5b60209290920196919550909350505050565b60208152600061119d602083018461102c565b6001600160a01b03811681146104b057600080fd5b6000602082840312156112cf57600080fd5b813561119d816112a8565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600181811c9082168061131a57607f821691505b60208210810361045c57634e487b7160e01b600052602260045260246000fd5b60006001600160401b0380831681810361136457634e487b7160e01b600052601160045260246000fd5b6001019392505050565b6000823560de1983360301811261138457600080fd5b9190910192915050565b6000808335601e198436030181126113a557600080fd5b8301803591506001600160401b038211156113bf57600080fd5b6020019150368190038213156113d457600080fd5b9250929050565b6000808335601e198436030181126113f257600080fd5b8301803591506001600160401b0382111561140c57600080fd5b6020019150600581901b36038213156113d457600080fd5b60008135610f8f816111a4565b5b818110156114465760008155600101611432565b5050565b600160401b82111561145e5761145e6112da565b8054828255808310156105fa578160005260206000206003840160021c810160188560031b1680156114a1576000198083018054828460200360031b1c16815550505b506114b46003840160021c830182611431565b5050505050565b6001600160401b038311156114d2576114d26112da565b6114dc838261144a565b60008181526020902082908460021c60005b8181101561154a576000805b600481101561153d5761152c61150f87611424565b6001600160401b03908116600684901b90811b91901b1984161790565b6020969096019591506001016114fa565b50838201556001016114ee565b506003198616808703818814611589576000805b828110156115835761157261150f88611424565b60209790970196915060010161155e565b50848401555b5050505050505050565b601f8211156105fa57806000526020600020601f840160051c810160208510156115ba5750805b6114b4601f850160051c830182611431565b6001600160401b038311156115e3576115e36112da565b6115f7836115f18354611306565b83611593565b6000601f84116001811461162b57600085156116135750838201355b600019600387901b1c1916600186901b1783556114b4565b600083815260209020601f19861690835b8281101561165c578685013582556020948501946001909201910161163c565b50868210156116795760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b8135611696816112a8565b81546001600160a01b031981166001600160a01b0392909216918217835560208401356116c2816111a4565b6001600160e01b03199190911690911760a09190911b67ffffffffffffffff60a01b16178155600181016117196116fb60408501611424565b825467ffffffffffffffff19166001600160401b0391909116178255565b61175a61172860608501611424565b82546fffffffffffffffff0000000000000000191660409190911b6fffffffffffffffff000000000000000016178255565b61179561176960808501611424565b82805467ffffffffffffffff60801b191660809290921b67ffffffffffffffff60801b16919091179055565b506117a360a08301836113db565b6117b18183600286016114bb565b50506117c060c083018361138e565b6117ce8183600386016115cc565b50505050565b600060a082016001600160401b03808b1684526020818b1681860152818a16604086015260a060608601528288845260c08601905089935060005b89811015611836578435611822816111a4565b84168252938201939082019060010161180f565b5085810360808701528681528688838301376000818801830152601f909601601f19169095019094019a995050505050505050505056fea264697066735822122066a215c17c478767affbf71a599fc178d8376e3fd9656b738f043e4c0814e59064736f6c63430008180033608060405234801561001057600080fd5b5061001961001e565b6100d0565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161561006e5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100cd5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b61187e806100df6000396000f3fe6080604052600436106101665760003560e01c80637adbf973116100d1578063a67265b11161008a578063dbb602fd11610064578063dbb602fd14610440578063df18e04714610460578063ed1bd76c1461048d578063f2fde38b146104ad57600080fd5b8063a67265b1146103da578063c4918b4e146103fa578063ca48b20b1461041057600080fd5b80637adbf973146103135780637dc0d1d0146103335780638456cb59146103535780638aec67fe146103685780638da5cb5b1461037d578063a3dace5d146103ba57600080fd5b80634b260981116101235780634b2609811461023657806351cff8d91461024c57806355e0af6b1461026c5780635c975abb1461029b578063715018a6146102cb57806374eeb847146102e057600080fd5b806308a957a91461016b5780630e6e91d81461018d578063285aaa20146101ad57806339acf9f1146101d65780633f4ba83a1461020e5780634ae809ee14610223575b600080fd5b34801561017757600080fd5b5061018b61018636600461161f565b6104cd565b005b34801561019957600080fd5b5061018b6101a8366004611648565b6104e1565b3480156101b957600080fd5b506101c360355481565b6040519081526020015b60405180910390f35b3480156101e257600080fd5b506000546101f6906001600160a01b031681565b6040516001600160a01b0390911681526020016101cd565b34801561021a57600080fd5b5061018b6104f2565b6101c361023136600461161f565b610504565b34801561024257600080fd5b506101c36103e881565b34801561025857600080fd5b5061018b61026736600461161f565b61076e565b34801561027857600080fd5b5061028c610287366004611648565b61086f565b6040516101cd939291906116a7565b3480156102a757600080fd5b506000805160206118298339815191525460ff1660405190151581526020016101cd565b3480156102d757600080fd5b5061018b610951565b3480156102ec57600080fd5b5060005461030190600160a01b900460ff1681565b60405160ff90911681526020016101cd565b34801561031f57600080fd5b5061018b61032e36600461161f565b610963565b34801561033f57600080fd5b506032546101f6906001600160a01b031681565b34801561035f57600080fd5b5061018b610974565b34801561037457600080fd5b506101c3610984565b34801561038957600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166101f6565b3480156103c657600080fd5b5061018b6103d5366004611648565b6109f2565b3480156103e657600080fd5b5061018b6103f53660046116d1565b610a03565b34801561040657600080fd5b506101c360345481565b34801561041c57600080fd5b50610427620222e081565b60405167ffffffffffffffff90911681526020016101cd565b34801561044c57600080fd5b506033546101f6906001600160a01b031681565b34801561046c57600080fd5b506101c361047b36600461161f565b60366020526000908152604090205481565b34801561049957600080fd5b506101c36104a8366004611648565b610b83565b3480156104b957600080fd5b5061018b6104c836600461161f565b610bd2565b6104d5610c0d565b6104de81610c68565b50565b6104e9610c0d565b6104de81610d13565b6104fa610c0d565b610502610d90565b565b600061050e610dea565b6001600160a01b0382166105655760405162461bcd60e51b815260206004820152601960248201527827b6b734a3b0b9a83ab6b81d103737903d32b9379030b2323960391b60448201526064015b60405180910390fd5b600061056f610984565b9050803410156105c15760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e6947617350756d703a20696e73756666696369656e7420666565000000604482015260640161055c565b60006105cd82346116ff565b90506034548111156106195760405162461bcd60e51b815260206004820152601560248201527409edadcd28ec2e6a0eadae07440deeccae440dac2f605b1b604482015260640161055c565b60006103e86035548361062c9190611712565b6106369190611729565b905061064281836116ff565b9150600061064f83610e1b565b6001600160a01b03871660009081526036602052604081208054929350839290919061067c90849061174b565b909155506106f9905061068d610f31565b6033546001600160a01b038981166000818152603660205260409081902054905160248101929092526044820152600192919091169060640160408051601f198184030181529190526020810180516001600160e01b0316631decdcfb60e11b179052620222e0610fae565b506001600160a01b038616600081815260366020908152604091829020548251908152349181019190915290810186905260608101849052608081018390527f7737fe59897f758714c24688a6470bb05235f01af1f4293edd0c290e651dd8319060a00160405180910390a295945050505050565b610776610c0d565b6001600160a01b0381166107c85760405162461bcd60e51b815260206004820152601960248201527827b6b734a3b0b9a83ab6b81d103737903d32b9379030b2323960391b604482015260640161055c565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610815576040519150601f19603f3d011682016040523d82523d6000602084013e61081a565b606091505b505090508061086b5760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e6947617350756d703a207769746864726177206661696c656400000000604482015260640161055c565b5050565b6000806060600061087e610984565b9050808510156108bd57505060408051808201909152601081526f696e73756666696369656e742066656560801b60208201526000925082915061094a565b6108c781866116ff565b94506034548511156109005750506040805180820190915260088152670deeccae440dac2f60c31b60208201526000925082915061094a565b6103e8603554866109119190611712565b61091b9190611729565b61092590866116ff565b945061093085610e1b565b600160405180602001604052806000815250935093509350505b9193909250565b610959610c0d565b61050260006110ed565b61096b610c0d565b6104de8161115e565b61097c610c0d565b610502611202565b60006001600160a01b036000196109eb61099c610f31565b6040516001600160a01b03851660248201526044810184905260640160408051601f198184030181529190526020810180516001600160e01b0316631decdcfb60e11b179052620222e061124b565b9250505090565b6109fa610c0d565b6104de816112c9565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff16600081158015610a495750825b905060008267ffffffffffffffff166001148015610a665750303b155b905081158015610a74575080155b15610a925760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610abc57845460ff60401b1916600160401b1785555b610ad4610acf604088016020890161161f565b61115e565b610ae9610ae4602088018861161f565b610c68565b610af68660800135610d13565b610b038660a001356112c9565b610b1d610b16606088016040890161161f565b600161134f565b610b35610b30608088016060890161161f565b611369565b8315610b7b57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b600080610b8f8361137a565b90506035546103e8610ba191906116ff565b610bad6103e883611712565b610bb79190611729565b9050610bc1610984565b610bcb908261174b565b9392505050565b610bda610c0d565b6001600160a01b038116610c0457604051631e4fbdf760e01b81526000600482015260240161055c565b6104de816110ed565b33610c3f7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146105025760405163118cdaa760e01b815233600482015260240161055c565b6001600160a01b038116610cbe5760405162461bcd60e51b815260206004820152601960248201527f4f6d6e6947617350756d703a207a65726f206164647265737300000000000000604482015260640161055c565b603380546001600160a01b0319166001600160a01b0383169081179091556040519081527ffd263e3b7583e8397be8a61710d1105cf8c0f111bbac1014d0ec7dbcd1e422f1906020015b60405180910390a150565b60008111610d5b5760405162461bcd60e51b815260206004820152601560248201527409edadcd28ec2e6a0eadae07440f4cae4de40dac2f605b1b604482015260640161055c565b60348190556040518181527f343ecf9262f8cafd2e9b0ffdab9f14bf18a17899eeef3e41133e84c354e5298390602001610d08565b610d98611446565b600080516020611829833981519152805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b039091168152602001610d08565b6000805160206118298339815191525460ff16156105025760405163d93c066560e01b815260040160405180910390fd5b6032546000906001600160a01b0316638b7bfd70610e37610f31565b6040516001600160e01b031960e084901b16815267ffffffffffffffff9091166004820152602401602060405180830381865afa158015610e7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea0919061175e565b603260009054906101000a90046001600160a01b03166001600160a01b0316638f9d6ace6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ef3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f17919061175e565b610f219084611712565b610f2b9190611729565b92915050565b60008060009054906101000a90046001600160a01b03166001600160a01b031663110ff5f16040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa99190611777565b905090565b60008054604051632376548f60e21b815282916001600160a01b031690638dd9523c90610fe3908a90889088906004016117a1565b602060405180830381865afa158015611000573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611024919061175e565b9050804710156110765760405162461bcd60e51b815260206004820152601860248201527f584170703a20696e73756666696369656e742066756e64730000000000000000604482015260640161055c565b60005460405163c21dda4f60e01b81526001600160a01b039091169063c21dda4f9083906110b0908b908b908b908b908b906004016117d8565b6000604051808303818588803b1580156110c957600080fd5b505af11580156110dd573d6000803e3d6000fd5b50939a9950505050505050505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6001600160a01b0381166111b45760405162461bcd60e51b815260206004820152601860248201527f4f6d6e6947617350756d703a207a65726f206f7261636c650000000000000000604482015260640161055c565b603280546001600160a01b0319166001600160a01b0383169081179091556040519081527f3f32684a32a11dabdbb8c0177de80aa3ae36a004d75210335b49e544e48cd0aa90602001610d08565b61120a610dea565b600080516020611829833981519152805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610dd2565b60008054604051632376548f60e21b81526001600160a01b0390911690638dd9523c90611280908790879087906004016117a1565b602060405180830381865afa15801561129d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c1919061175e565b949350505050565b6103e8811061131a5760405162461bcd60e51b815260206004820152601960248201527f4f6d6e6947617350756d703a2070637420746f6f206869676800000000000000604482015260640161055c565b60358190556040518181527f0b3d400288f60ce0f5632cd941b5748faa91ebea844cbe78c5180b7838a0933f90602001610d08565b611357611476565b611360826114bf565b61086b81611558565b611371611476565b6104de816115fb565b603254604080516347ceb56760e11b815290516000926001600160a01b031691638f9d6ace9160048083019260209291908290030181865afa1580156113c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e8919061175e565b6032546001600160a01b0316638b7bfd70611401610f31565b6040516001600160e01b031960e084901b16815267ffffffffffffffff9091166004820152602401602060405180830381865afa158015610ef3573d6000803e3d6000fd5b6000805160206118298339815191525460ff1661050257604051638dfc202b60e01b815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661050257604051631afcd79f60e31b815260040160405180910390fd5b6001600160a01b03811661150a5760405162461bcd60e51b8152602060048201526012602482015271584170703a206e6f207a65726f206f6d6e6960701b604482015260640161055c565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f79162c8d053a07e70cdc1ccc536f0440b571f8508377d2bef51094fadab98f4790602001610d08565b61156181611603565b6115ad5760405162461bcd60e51b815260206004820152601860248201527f584170703a20696e76616c696420636f6e66206c6576656c0000000000000000604482015260640161055c565b6000805460ff60a01b1916600160a01b60ff8416908102919091179091556040519081527f8de08a798b4e50b4f351c1eaa91a11530043802be3ffac2df87db0c45a2e848390602001610d08565b610bda611476565b600060ff821660011480610f2b575060ff821660041492915050565b60006020828403121561163157600080fd5b81356001600160a01b0381168114610bcb57600080fd5b60006020828403121561165a57600080fd5b5035919050565b6000815180845260005b818110156116875760208185018101518683018201520161166b565b506000602082860101526020601f19601f83011685010191505092915050565b83815282151560208201526060604082015260006116c86060830184611661565b95945050505050565b600060c082840312156116e357600080fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610f2b57610f2b6116e9565b8082028115828204841417610f2b57610f2b6116e9565b60008261174657634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610f2b57610f2b6116e9565b60006020828403121561177057600080fd5b5051919050565b60006020828403121561178957600080fd5b815167ffffffffffffffff81168114610bcb57600080fd5b600067ffffffffffffffff8086168352606060208401526117c56060840186611661565b9150808416604084015250949350505050565b600067ffffffffffffffff808816835260ff8716602084015260018060a01b038616604084015260a0606084015261181360a0840186611661565b9150808416608084015250969550505050505056fecd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300a2646970667358221220337439e9ecaed206db72d1ece6e5c9f7cbfb208da96e898f91811c4a29fccc0264736f6c63430008180033608060405234801561001057600080fd5b5061001961001e565b6100d0565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161561006e5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100cd5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6111fe806100df6000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c80638f9d6ace116100ad578063b48ec86111610071578063b48ec86114610352578063d070415714610385578063d0ebdbe7146103b1578063ee590a53146103c4578063f2fde38b146103d757600080fd5b80638f9d6ace1461030657806393a871881461031057806398563b0314610323578063a34e7abb14610336578063b0e21e8a1461034957600080fd5b8063787dce3d116100f4578063787dce3d146102635780638b7bfd70146102765780638da5cb5b146102b05780638dd9523c146102e05780638df66e34146102f357600080fd5b80632d4634a414610131578063361c019f14610200578063481c6a751461021557806354fd4d5014610240578063715018a61461025b575b600080fd5b6101b261013f366004610e02565b60408051608080820183526000808352602080840182905283850182905260609384018290526001600160401b03958616825260038152908490208451928301855280548087168452600160401b9004909516908201526001840154928101929092526002909201549181019190915290565b6040516101f7919060006080820190506001600160401b0380845116835280602085015116602084015250604083015160408301526060830151606083015292915050565b60405180910390f35b61021361020e366004610e86565b6103ea565b005b600254610228906001600160a01b031681565b6040516001600160a01b0390911681526020016101f7565b60015b6040516001600160401b0390911681526020016101f7565b610213610522565b610213610271366004610f04565b610536565b6102a2610284366004610e02565b6001600160401b031660009081526003602052604090206002015490565b6040519081526020016101f7565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b0316610228565b6102a26102ee366004610f1d565b61054a565b600054610243906001600160401b031681565b6102a2620f424081565b61021361031e366004610fb0565b6106d3565b610213610331366004610ff1565b61070b565b610213610344366004610ff1565b61073f565b6102a260015481565b610243610360366004610e02565b6001600160401b03908116600090815260036020526040902054600160401b90041690565b6102a2610393366004610e02565b6001600160401b031660009081526003602052604090206001015490565b6102136103bf36600461101b565b610773565b6102136103d2366004610e02565b6107da565b6102136103e536600461101b565b6107eb565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b031660008115801561042f5750825b90506000826001600160401b0316600114801561044b5750303b155b905081158015610459575080155b156104775760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156104a157845460ff60401b1916600160401b1785555b6104aa8b610826565b6104b38a610837565b6104bc8961088c565b6104c5886108db565b6104cf8787610910565b831561051557845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050505050565b61052a610b2b565b6105346000610b86565b565b61053e610b2b565b610547816108db565b50565b6001600160401b038085166000908152600360205260408082208054600160401b900490931682528120600283015460018401549293928491620f424091610592919061104c565b61059c9190611069565b90506000620f4240836002015484600101546105b8919061104c565b6105c29190611069565b9050600082116106195760405162461bcd60e51b815260206004820152601a60248201527f4665654f7261636c6556313a206e6f2066656520706172616d7300000000000060448201526064015b60405180910390fd5b600081116106695760405162461bcd60e51b815260206004820152601a60248201527f4665654f7261636c6556313a206e6f2066656520706172616d730000000000006044820152606401610610565b600061067688601061104c565b9050610682828261104c565b600054849061069b908a906001600160401b031661108b565b6001600160401b03166106ae919061104c565b6001546106bb91906110b2565b6106c591906110b2565b9a9950505050505050505050565b6002546001600160a01b031633146106fd5760405162461bcd60e51b8152600401610610906110c5565b6107078282610910565b5050565b6002546001600160a01b031633146107355760405162461bcd60e51b8152600401610610906110c5565b6107078282610bf7565b6002546001600160a01b031633146107695760405162461bcd60e51b8152600401610610906110c5565b6107078282610ccc565b61077b610b2b565b6001600160a01b0381166107d15760405162461bcd60e51b815260206004820152601c60248201527f4665654f7261636c6556313a206e6f207a65726f206d616e61676572000000006044820152606401610610565b61054781610837565b6107e2610b2b565b6105478161088c565b6107f3610b2b565b6001600160a01b03811661081d57604051631e4fbdf760e01b815260006004820152602401610610565b61054781610b86565b61082e610d95565b61054781610dde565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f60a0f5b9f9e81e98216071b85826681c796256fe3d1354ecb675580fba64fa69906020015b60405180910390a150565b6000805467ffffffffffffffff19166001600160401b0383169081179091556040519081527f6185fbe062d94552cf644f5cb643f583db7b2e7e66fdc4b4c75ff8876a257ba690602001610881565b60018190556040518181527fdb5aafdb29539329e37d4e3ee869bc4031941fd55a5dfc92824fbe34b204e30d90602001610881565b60005b81811015610b2657600083838381811061092f5761092f6110fc565b9050608002018036038101906109459190611112565b9050600081604001511161099b5760405162461bcd60e51b815260206004820152601e60248201527f4665654f7261636c6556313a206e6f207a65726f2067617320707269636500006044820152606401610610565b60008160600151116109eb5760405162461bcd60e51b81526020600482015260196024820152784665654f7261636c6556313a206e6f207a65726f207261746560381b6044820152606401610610565b80516001600160401b0316600003610a155760405162461bcd60e51b815260040161061090611191565b80602001516001600160401b0316600003610a725760405162461bcd60e51b815260206004820152601c60248201527f4665654f7261636c6556313a206e6f207a65726f20706f737473546f000000006044820152606401610610565b80516001600160401b0390811660009081526003602090815260409182902084518154838701519186166fffffffffffffffffffffffffffffffff199091168117600160401b92909616918202959095178255838601516001830181905560608088015160029094018490558551968752938601919091528484015290830152517ff378a0dd98429494eb2e26894562949c4d6e7cef5eb893b1d4c0052078d92fe59181900360800190a150600101610913565b505050565b33610b5d7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146105345760405163118cdaa760e01b8152336004820152602401610610565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60008111610c475760405162461bcd60e51b815260206004820152601e60248201527f4665654f7261636c6556313a206e6f207a65726f2067617320707269636500006044820152606401610610565b816001600160401b0316600003610c705760405162461bcd60e51b815260040161061090611191565b6001600160401b038216600081815260036020908152604091829020600101849055815192835282018390527f3b196e45eaa29099834d3d912ac550e4f3e13fef2e2a998100368e506a44d8ff91015b60405180910390a15050565b60008111610d185760405162461bcd60e51b81526020600482015260196024820152784665654f7261636c6556313a206e6f207a65726f207261746560381b6044820152606401610610565b816001600160401b0316600003610d415760405162461bcd60e51b815260040161061090611191565b6001600160401b038216600081815260036020908152604091829020600201849055815192835282018390527f4b4594c9f06af25bc504eead96f7f0eaa3f1577f8d9b075b236520ec712e13089101610cc0565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661053457604051631afcd79f60e31b815260040160405180910390fd5b6107f3610d95565b80356001600160401b0381168114610dfd57600080fd5b919050565b600060208284031215610e1457600080fd5b610e1d82610de6565b9392505050565b80356001600160a01b0381168114610dfd57600080fd5b60008083601f840112610e4d57600080fd5b5081356001600160401b03811115610e6457600080fd5b6020830191508360208260071b8501011115610e7f57600080fd5b9250929050565b60008060008060008060a08789031215610e9f57600080fd5b610ea887610e24565b9550610eb660208801610e24565b9450610ec460408801610de6565b93506060870135925060808701356001600160401b03811115610ee657600080fd5b610ef289828a01610e3b565b979a9699509497509295939492505050565b600060208284031215610f1657600080fd5b5035919050565b60008060008060608587031215610f3357600080fd5b610f3c85610de6565b935060208501356001600160401b0380821115610f5857600080fd5b818701915087601f830112610f6c57600080fd5b813581811115610f7b57600080fd5b886020828501011115610f8d57600080fd5b602083019550809450505050610fa560408601610de6565b905092959194509250565b60008060208385031215610fc357600080fd5b82356001600160401b03811115610fd957600080fd5b610fe585828601610e3b565b90969095509350505050565b6000806040838503121561100457600080fd5b61100d83610de6565b946020939093013593505050565b60006020828403121561102d57600080fd5b610e1d82610e24565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761106357611063611036565b92915050565b60008261108657634e487b7160e01b600052601260045260246000fd5b500490565b6001600160401b038181168382160190808211156110ab576110ab611036565b5092915050565b8082018082111561106357611063611036565b60208082526018908201527f4665654f7261636c6556313a206e6f74206d616e616765720000000000000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60006080828403121561112457600080fd5b604051608081018181106001600160401b038211171561115457634e487b7160e01b600052604160045260246000fd5b60405261116083610de6565b815261116e60208401610de6565b602082015260408301356040820152606083013560608201528091505092915050565b6020808252601d908201527f4665654f7261636c6556313a206e6f207a65726f20636861696e20696400000060408201526060019056fea2646970667358221220e44aee2e8e467ae08b9968f7e69054db1b156ad71c62dbe0ad2108c880cd18a064736f6c63430008180033608060405234801561001057600080fd5b5061001961001e565b6100d0565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161561006e5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100cd5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b61104b806100df6000396000f3fe6080604052600436106100e15760003560e01c806374eeb8471161007f578063a04feb8611610059578063a04feb8614610282578063bac34036146102a2578063ed116d08146102e8578063f2fde38b1461030857600080fd5b806374eeb847146101fd5780638456cb59146102305780638da5cb5b1461024557600080fd5b80634afa17dd116100bb5780634afa17dd146101615780634e0dc4f0146101815780635c975abb146101b7578063715018a6146101e857600080fd5b806339acf9f1146100ed5780633bd9b9f61461012a5780633f4ba83a1461014c57600080fd5b366100e857005b600080fd5b3480156100f957600080fd5b5060005461010d906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561013657600080fd5b5061014a610145366004610db3565b610328565b005b34801561015857600080fd5b5061014a6105f5565b34801561016d57600080fd5b5061014a61017c366004610df4565b610607565b34801561018d57600080fd5b5061010d61019c366004610e2d565b6032602052600090815260409020546001600160a01b031681565b3480156101c357600080fd5b50600080516020610ff68339815191525460ff165b6040519015158152602001610121565b3480156101f457600080fd5b5061014a61061d565b34801561020957600080fd5b5060005461021e90600160a01b900460ff1681565b60405160ff9091168152602001610121565b34801561023c57600080fd5b5061014a61062f565b34801561025157600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031661010d565b34801561028e57600080fd5b5061014a61029d366004610e51565b61063f565b3480156102ae57600080fd5b506102da6102bd366004610ee5565b603360209081526000928352604080842090915290825290205481565b604051908152602001610121565b3480156102f457600080fd5b506101d8610303366004610df4565b6107c9565b34801561031457600080fd5b5061014a610323366004610f13565b61080f565b60005460408051631799380760e11b815281516001600160a01b0390931692632f32700e926004808401939192918290030181865afa15801561036f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103939190610f30565b8051600180546020909301516001600160a01b0316600160401b026001600160e01b03199093166001600160401b03909216919091179190911790556103d761084d565b6103df61087e565b801561040d575060015461040d906001600160401b03811690600160401b90046001600160a01b03166107c9565b61045e5760405162461bcd60e51b815260206004820152601860248201527f47617353746174696f6e3a20756e617574686f72697a6564000000000000000060448201526064015b60405180910390fd5b6001600160a01b03821660009081526033602090815260408083206001546001600160401b031684529091529020548082116104dc5760405162461bcd60e51b815260206004820152601a60248201527f47617353746174696f6e3a20616c72656164792066756e6465640000000000006044820152606401610455565b60006001600160a01b0384166104f28385610f9c565b604051600081818185875af1925050503d806000811461052e576040519150601f19603f3d011682016040523d82523d6000602084013e610533565b606091505b50509050801561056f576001600160a01b03841660009081526033602090815260408083206001546001600160401b0316845290915290208390555b6001546001600160a01b03851660008181526033602090815260408083206001600160401b0390951680845294825291829020548251888152918201528415158183015290517f4264b2d9471008d8513ddd06a5da387491ccaf43988f604f5eca833d30551c9d9181900360600190a35050600180546001600160e01b03191690555050565b6105fd610911565b61060561096c565b565b61060f610911565b61061982826109cd565b5050565b610625610911565b6106056000610ae0565b610637610911565b610605610b51565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03166000811580156106845750825b90506000826001600160401b031660011480156106a05750303b155b9050811580156106ae575080155b156106cc5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156106f657845460ff60401b1916600160401b1785555b610701896004610b9a565b61070a88610bb4565b60005b868110156107775761076f88888381811061072a5761072a610fbd565b6107409260206040909202019081019150610e2d565b89898481811061075257610752610fbd565b905060400201602001602081019061076a9190610f13565b6109cd565b60010161070d565b5083156107be57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050565b60006001600160a01b0382161580159061080657506001600160401b0383166000908152603260205260409020546001600160a01b038381169116145b90505b92915050565b610817610911565b6001600160a01b03811661084157604051631e4fbdf760e01b815260006004820152602401610455565b61084a81610ae0565b50565b600080516020610ff68339815191525460ff16156106055760405163d93c066560e01b815260040160405180910390fd5b60008060009054906101000a90046001600160a01b03166001600160a01b03166355e2448e6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f69190610fd3565b801561090c57506000546001600160a01b031633145b905090565b336109437f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146106055760405163118cdaa760e01b8152336004820152602401610455565b610974610bc5565b600080516020610ff6833981519152805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b0390911681526020015b60405180910390a150565b6001600160a01b038116610a1b5760405162461bcd60e51b815260206004820152601560248201527423b0b9a9ba30ba34b7b71d103d32b9379030b2323960591b6044820152606401610455565b816001600160401b0316600003610a745760405162461bcd60e51b815260206004820152601860248201527f47617353746174696f6e3a207a65726f20636861696e496400000000000000006044820152606401610455565b6001600160401b03821660008181526032602090815260409182902080546001600160a01b0319166001600160a01b03861690811790915591519182527f193d7693e9edcedc2357451dd62125041be2c877aa64852b126906cd438f08f5910160405180910390a25050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b610b5961084d565b600080516020610ff6833981519152805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336109ae565b610ba2610bf5565b610bab82610c3e565b61061981610cd7565b610bbc610bf5565b61084a81610d7a565b600080516020610ff68339815191525460ff1661060557604051638dfc202b60e01b815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661060557604051631afcd79f60e31b815260040160405180910390fd5b6001600160a01b038116610c895760405162461bcd60e51b8152602060048201526012602482015271584170703a206e6f207a65726f206f6d6e6960701b6044820152606401610455565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f79162c8d053a07e70cdc1ccc536f0440b571f8508377d2bef51094fadab98f47906020016109c2565b610ce081610d82565b610d2c5760405162461bcd60e51b815260206004820152601860248201527f584170703a20696e76616c696420636f6e66206c6576656c00000000000000006044820152606401610455565b6000805460ff60a01b1916600160a01b60ff8416908102919091179091556040519081527f8de08a798b4e50b4f351c1eaa91a11530043802be3ffac2df87db0c45a2e8483906020016109c2565b610817610bf5565b600060ff821660011480610809575060ff821660041492915050565b6001600160a01b038116811461084a57600080fd5b60008060408385031215610dc657600080fd5b8235610dd181610d9e565b946020939093013593505050565b6001600160401b038116811461084a57600080fd5b60008060408385031215610e0757600080fd5b8235610e1281610ddf565b91506020830135610e2281610d9e565b809150509250929050565b600060208284031215610e3f57600080fd5b8135610e4a81610ddf565b9392505050565b60008060008060608587031215610e6757600080fd5b8435610e7281610d9e565b93506020850135610e8281610d9e565b925060408501356001600160401b0380821115610e9e57600080fd5b818701915087601f830112610eb257600080fd5b813581811115610ec157600080fd5b8860208260061b8501011115610ed657600080fd5b95989497505060200194505050565b60008060408385031215610ef857600080fd5b8235610f0381610d9e565b91506020830135610e2281610ddf565b600060208284031215610f2557600080fd5b8135610e4a81610d9e565b600060408284031215610f4257600080fd5b604051604081018181106001600160401b0382111715610f7257634e487b7160e01b600052604160045260246000fd5b6040528251610f8081610ddf565b81526020830151610f9081610d9e565b60208201529392505050565b8181038181111561080957634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060208284031215610fe557600080fd5b81518015158114610e4a57600080fdfecd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300a2646970667358221220c90383f5e125df0292aaa05e40a3c882f4e981aeba8849edfae9e33b90857c3464736f6c6343000818003360a060405234801561001057600080fd5b5060405161165938038061165983398101604081905261002f916100fc565b6001600160a01b03811660805261004461004a565b5061012c565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161561009a5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100f95780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b60006020828403121561010e57600080fd5b81516001600160a01b038116811461012557600080fd5b9392505050565b608051611504610155600039600081816103a601528181610a260152610f8401526115046000f3fe6080604052600436106101095760003560e01c80638456cb5911610095578063c3de453d11610064578063c3de453d14610321578063ed56531a14610334578063f2fde38b14610354578063f3fef3a314610374578063fc0c546a1461039457600080fd5b80638456cb591461027d5780638da5cb5b146102925780638fdcb4c9146102cf578063a10ac97a146102ff57600080fd5b80633794999d116100dc5780633794999d146101db57806339acf9f1146101fb5780633f4ba83a14610233578063485cc95514610248578063715018a61461026857600080fd5b806309839a931461010e578063241b71bb1461015557806325d70f78146101855780632f4dae9f146101b9575b600080fd5b34801561011a57600080fd5b506101427f0683d1c283a672fc58eb7940a0dba83ea98b96966a9ca1b030dec2c60cea4d1e81565b6040519081526020015b60405180910390f35b34801561016157600080fd5b50610175610170366004611212565b6103c8565b604051901515815260200161014c565b34801561019157600080fd5b506101427f855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c7781565b3480156101c557600080fd5b506101d96101d4366004611212565b6103d9565b005b3480156101e757600080fd5b506101426101f6366004611240565b6103ed565b34801561020757600080fd5b5060005461021b906001600160a01b031681565b6040516001600160a01b03909116815260200161014c565b34801561023f57600080fd5b506101d9610520565b34801561025457600080fd5b506101d9610263366004611281565b610532565b34801561027457600080fd5b506101d96106b9565b34801561028957600080fd5b506101d96106cb565b34801561029e57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031661021b565b3480156102db57600080fd5b506102e66201388081565b60405167ffffffffffffffff909116815260200161014c565b34801561030b57600080fd5b506101426000805160206114af83398151915281565b6101d961032f3660046112ba565b6106db565b34801561034057600080fd5b506101d961034f366004611212565b610757565b34801561036057600080fd5b506101d961036f3660046112e6565b610768565b34801561038057600080fd5b506101d961038f3660046112ba565b6107a3565b3480156103a057600080fd5b5061021b7f000000000000000000000000000000000000000000000000000000000000000081565b60006103d382610add565b92915050565b6103e1610b5c565b6103ea81610bb7565b50565b600080546040805163110ff5f160e01b815290516001600160a01b0390921691638dd9523c91839163110ff5f1916004808201926020929091908290030181865afa158015610440573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104649190611320565b6040516001600160a01b038089166024830152871660448201526064810186905260840160408051601f198184030181529181526020820180516001600160e01b0316636ce5768960e11b179052516001600160e01b031960e085901b1681526104d79291906201388090600401611381565b602060405180830381865afa1580156104f4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051891906113b8565b949350505050565b610528610b5c565b610530610c6f565b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff166000811580156105785750825b905060008267ffffffffffffffff1660011480156105955750303b155b9050811580156105a3575080155b156105c15760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156105eb57845460ff60401b1916600160401b1785555b6001600160a01b0386166106465760405162461bcd60e51b815260206004820152601860248201527f4f6d6e694272696467653a206e6f207a65726f2061646472000000000000000060448201526064015b60405180910390fd5b61064f87610c86565b600080546001600160a01b0319166001600160a01b03881617905583156106b057845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b6106c1610b5c565b6105306000610c97565b6106d3610b5c565b610530610d08565b7f0683d1c283a672fc58eb7940a0dba83ea98b96966a9ca1b030dec2c60cea4d1e61070581610add565b156107475760405162461bcd60e51b815260206004820152601260248201527113db5b9a509c9a5919d94e881c185d5cd95960721b604482015260640161063d565b610752338484610d1f565b505050565b61075f610b5c565b6103ea81611109565b610770610b5c565b6001600160a01b03811661079a57604051631e4fbdf760e01b81526000600482015260240161063d565b6103ea81610c97565b7f855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c776107cd81610add565b1561080f5760405162461bcd60e51b815260206004820152601260248201527113db5b9a509c9a5919d94e881c185d5cd95960721b604482015260640161063d565b6000805460408051631799380760e11b815281516001600160a01b0390931692632f32700e926004808401939192918290030181865afa158015610857573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061087b91906113d1565b6000549091506001600160a01b031633146108d05760405162461bcd60e51b815260206004820152601560248201527413db5b9a509c9a5919d94e881b9bdd081e18d85b1b605a1b604482015260640161063d565b60208101516001600160a01b0316600262048789608a1b011461092e5760405162461bcd60e51b81526020600482015260166024820152754f6d6e694272696467653a206e6f742062726964676560501b604482015260640161063d565b60008054906101000a90046001600160a01b03166001600160a01b031663110ff5f16040518163ffffffff1660e01b8152600401602060405180830381865afa15801561097f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a39190611320565b67ffffffffffffffff16816000015167ffffffffffffffff1614610a005760405162461bcd60e51b81526020600482015260146024820152734f6d6e694272696467653a206e6f74206f6d6e6960601b604482015260640161063d565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018590527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015610a6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a93919061143c565b50836001600160a01b03167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a942436484604051610acf91815260200190565b60405180910390a250505050565b6000805160206114af83398151915260009081527fff37105740f03695c8f3597f3aff2b92fbe1c80abea3c28731ecff2efd69340060208190527ffae9838a178d7f201aa98e2ce5340158edda60bb1e8f168f46503bf3e99f13be5460ff1680610b55575060008381526020829052604090205460ff165b9392505050565b33610b8e7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146105305760405163118cdaa760e01b815233600482015260240161063d565b60008181527fff37105740f03695c8f3597f3aff2b92fbe1c80abea3c28731ecff2efd693400602081905260409091205460ff16610c2e5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161063d565b600082815260208290526040808220805460ff191690555183917fd05bfc2250abb0f8fd265a54c53a24359c5484af63cad2e4ce87c78ab751395a91a25050565b6105306000805160206114af833981519152610bb7565b610c8e6111c1565b6103ea8161120a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6105306000805160206114af833981519152611109565b60008111610d6f5760405162461bcd60e51b815260206004820152601e60248201527f4f6d6e694272696467653a20616d6f756e74206d757374206265203e20300000604482015260640161063d565b6001600160a01b038216610dc55760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e694272696467653a206e6f2062726964676520746f207a65726f000000604482015260640161063d565b60008060009054906101000a90046001600160a01b03166001600160a01b031663110ff5f16040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3d9190611320565b6040516001600160a01b038087166024830152851660448201526064810184905290915060009060840160408051601f198184030181529181526020820180516001600160e01b0316636ce5768960e11b1790526000549051632376548f60e21b81529192506001600160a01b031690638dd9523c90610ec890859085906201388090600401611381565b602060405180830381865afa158015610ee5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0991906113b8565b341015610f585760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e694272696467653a20696e73756666696369656e742066656500000000604482015260640161063d565b6040516323b872dd60e01b81526001600160a01b038681166004830152306024830152604482018590527f000000000000000000000000000000000000000000000000000000000000000016906323b872dd906064016020604051808303816000875af1158015610fcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff1919061143c565b61103d5760405162461bcd60e51b815260206004820152601b60248201527f4f6d6e694272696467653a207472616e73666572206661696c65640000000000604482015260640161063d565b60005460405163c21dda4f60e01b81526001600160a01b039091169063c21dda4f903490611083908690600490600262048789608a1b019088906201388090840161145e565b6000604051808303818588803b15801561109c57600080fd5b505af11580156110b0573d6000803e3d6000fd5b5050505050836001600160a01b0316856001600160a01b03167f59bc8a913d49a9626dd6ba5def7fcf12804061c1bb9b8b6db077e1a12cb4b422856040516110fa91815260200190565b60405180910390a35050505050565b60008181527fff37105740f03695c8f3597f3aff2b92fbe1c80abea3c28731ecff2efd693400602081905260409091205460ff161561117d5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161063d565b600082815260208290526040808220805460ff191660011790555183917f0cb09dc71d57eeec2046f6854976717e4874a3cf2d6ddeddde337e5b6de6ba3191a25050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661053057604051631afcd79f60e31b815260040160405180910390fd5b6107706111c1565b60006020828403121561122457600080fd5b5035919050565b6001600160a01b03811681146103ea57600080fd5b60008060006060848603121561125557600080fd5b83356112608161122b565b925060208401356112708161122b565b929592945050506040919091013590565b6000806040838503121561129457600080fd5b823561129f8161122b565b915060208301356112af8161122b565b809150509250929050565b600080604083850312156112cd57600080fd5b82356112d88161122b565b946020939093013593505050565b6000602082840312156112f857600080fd5b8135610b558161122b565b805167ffffffffffffffff8116811461131b57600080fd5b919050565b60006020828403121561133257600080fd5b610b5582611303565b6000815180845260005b8181101561136157602081850181015186830182015201611345565b506000602082860101526020601f19601f83011685010191505092915050565b600067ffffffffffffffff8086168352606060208401526113a5606084018661133b565b9150808416604084015250949350505050565b6000602082840312156113ca57600080fd5b5051919050565b6000604082840312156113e357600080fd5b6040516040810181811067ffffffffffffffff8211171561141457634e487b7160e01b600052604160045260246000fd5b60405261142083611303565b815260208301516114308161122b565b60208201529392505050565b60006020828403121561144e57600080fd5b81518015158114610b5557600080fd5b600067ffffffffffffffff808816835260ff8716602084015260018060a01b038616604084015260a0606084015261149960a084018661133b565b9150808416608084015250969550505050505056fe76e8952e4b09b8d505aa08998d716721a1dbf0884ac74202e33985da1ed005e9a2646970667358221220f6dcf7b2f6cea028609d1d19b031702ab0b255056d11473592225165a4dd254264736f6c634300081800336080604052600c8054600160ff199182168117909255601f8054909116909117905534801561002d57600080fd5b506157948061003d6000396000f3fe60806040523480156200001157600080fd5b5060043610620000e05760003560e01c806385226c811162000097578063b5508aa9116200006e578063b5508aa914620001a2578063ba414fa614620001ac578063e20c9f7114620001c7578063fa7626d414620001d157600080fd5b806385226c811462000166578063916a17c6146200017f578063b0464fdc146200019857600080fd5b80631ed7831c14620000e55780632ade388014620001075780633e5e3c2314620001205780633f7286f4146200012a578063522bb704146200013457806366d9a9a0146200014d575b600080fd5b620000ef620001df565b604051620000fe9190620038dc565b60405180910390f35b6200011162000243565b604051620000fe91906200397f565b620000ef62000391565b620000ef620003f3565b6200014b6200014536600462003a5b565b62000455565b005b620001576200055c565b604051620000fe919062003aca565b62000170620006d5565b604051620000fe919062003b57565b62000189620007af565b604051620000fe919062003bbf565b6200018962000899565b6200017062000983565b620001b662000a5d565b6040519015158152602001620000fe565b620000ef62000b12565b601f54620001b69060ff1681565b606060168054806020026020016040519081016040528092919081815260200182805480156200023957602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116200021a575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b828210156200038857600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b8282101562000370578382906000526020600020018054620002dc9062003c34565b80601f01602080910402602001604051908101604052809291908181526020018280546200030a9062003c34565b80156200035b5780601f106200032f576101008083540402835291602001916200035b565b820191906000526020600020905b8154815290600101906020018083116200033d57829003601f168201915b505050505081526020019060010190620002ba565b50505050815250508152602001906001019062000267565b50505050905090565b6060601880548060200260200160405190810160405280929190818152602001828054801562000239576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116200021a575050505050905090565b6060601780548060200260200160405190810160405280929190818152602001828054801562000239576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116200021a575050505050905090565b60006000805160206200573f83398151915260001c6001600160a01b0316634ad0bac96040518163ffffffff1660e01b81526004016060604051808303816000875af1158015620004aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004d0919062003c70565b5090915060009050816004811115620004ed57620004ed62003cc7565b146200052f5760405162461bcd60e51b815260206004820152600c60248201526b1b9bc8189c9bd85918d85cdd60a21b60448201526064015b60405180910390fd5b6200053a8262000b74565b62000544620011bc565b6200054e6200183e565b6200055862001bf9565b5050565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015620003885783829060005260206000209060020201604051806040016040529081600082018054620005b69062003c34565b80601f0160208091040260200160405190810160405280929190818152602001828054620005e49062003c34565b8015620006355780601f10620006095761010080835404028352916020019162000635565b820191906000526020600020905b8154815290600101906020018083116200061757829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015620006bc57602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116200067d5790505b5050505050815250508152602001906001019062000580565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015620003885783829060005260206000200180546200071b9062003c34565b80601f0160208091040260200160405190810160405280929190818152602001828054620007499062003c34565b80156200079a5780601f106200076e576101008083540402835291602001916200079a565b820191906000526020600020905b8154815290600101906020018083116200077c57829003601f168201915b505050505081526020019060010190620006f9565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015620003885760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156200088057602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b03191681526020019060040190602082600301049283019260010382029150808411620008415790505b50505050508152505081526020019060010190620007d3565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015620003885760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156200096a57602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116200092b5790505b50505050508152505081526020019060010190620008bd565b60606019805480602002602001604051908101604052809291908181526020016000905b8282101562000388578382906000526020600020018054620009c99062003c34565b80601f0160208091040260200160405190810160405280929190818152602001828054620009f79062003c34565b801562000a485780601f1062000a1c5761010080835404028352916020019162000a48565b820191906000526020600020905b81548152906001019060200180831162000a2a57829003601f168201915b505050505081526020019060010190620009a7565b60085460009060ff161562000a76575060085460ff1690565b604051630667f9d760e41b81526000906000805160206200571f8339815191529063667f9d709062000ac7906000805160206200573f833981519152906519985a5b195960d21b9060040162003cdd565b602060405180830381865afa15801562000ae5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b0b919062003cf6565b1415905090565b6060601580548060200260200160405190810160405280929190818152602001828054801562000239576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116200021a575050505050905090565b80601f60016101000a8154816001600160a01b0302191690836001600160a01b03160217905550601f60019054906101000a90046001600160a01b03166001600160a01b031663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000bef573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c15919062003d10565b602180546001600160a01b0319166001600160a01b03928316179055601f5460408051638da5cb5b60e01b8152905161010090920490921691638da5cb5b9160048083019260209291908290030181865afa15801562000c79573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c9f919062003d10565b602280546001600160a01b0319166001600160a01b039290921691909117905560405162000ccd9062003859565b604051809103906000f08015801562000cea573d6000803e3d6000fd5b50602080546001600160a01b0319166001600160a01b039290921691821790556040516370ca10bb60e01b81526000805160206200571f833981519152916370ca10bb9162000d429185916000919060040162003d30565b600060405180830381600087803b15801562000d5d57600080fd5b505af115801562000d72573d6000803e3d6000fd5b50506022546040516303223eab60e11b81526001600160a01b0390911660048201526000805160206200571f83398151915292506306447d569150602401600060405180830381600087803b15801562000dcb57600080fd5b505af115801562000de0573d6000803e3d6000fd5b5050601f54604080516309839a9360e01b815290516101009092046001600160a01b0316935063241b71bb925083916309839a93916004808201926020929091908290030181865afa15801562000e3b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e61919062003cf6565b6040518263ffffffff1660e01b815260040162000e8091815260200190565b602060405180830381865afa15801562000e9e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ec4919062003d51565b1562000f9b57601f54604080516309839a9360e01b815290516101009092046001600160a01b031691632f4dae9f9183916309839a93916004808201926020929091908290030181865afa15801562000f21573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000f47919062003cf6565b6040518263ffffffff1660e01b815260040162000f6691815260200190565b600060405180830381600087803b15801562000f8157600080fd5b505af115801562000f96573d6000803e3d6000fd5b505050505b601f54604080516304bae1ef60e31b815290516101009092046001600160a01b03169163241b71bb9183916325d70f78916004808201926020929091908290030181865afa15801562000ff2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001018919062003cf6565b6040518263ffffffff1660e01b81526004016200103791815260200190565b602060405180830381865afa15801562001055573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200107b919062003d51565b156200115257601f54604080516304bae1ef60e31b815290516101009092046001600160a01b031691632f4dae9f9183916325d70f78916004808201926020929091908290030181865afa158015620010d8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010fe919062003cf6565b6040518263ffffffff1660e01b81526004016200111d91815260200190565b600060405180830381600087803b1580156200113857600080fd5b505af11580156200114d573d6000803e3d6000fd5b505050505b6000805160206200573f83398151915260001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620011a057600080fd5b505af1158015620011b5573d6000803e3d6000fd5b5050505050565b6000620011e360405180604001604052806002815260200161746f60f01b81525062002033565b601f54604051633794999d60e01b815230600482018190526001600160a01b038085166024840152670de0b6b3a764000060448401819052949550909260009261010090910490911690633794999d90606401602060405180830381865afa15801562001254573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200127a919062003cf6565b602154601f546040516370a0823160e01b81526001600160a01b03610100909204821660048201529293506000929116906370a0823190602401602060405180830381865afa158015620012d2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620012f8919062003cf6565b602080546040805163110ff5f160e01b815290519394506000805160206200571f8339815191529363f30c7ba3936001600160a01b03909316928792849263110ff5f1926004808401939192918290030181865afa1580156200135f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001385919062003d75565b6040516001600160a01b03808a1660248301528b166044820152606481018a9052600490600262048789608a1b019060840160408051808303601f1901815291815260208083018051636ce5768960e11b6001600160e01b03909116179052601f548251638fdcb4c960e01b815292516101009091046001600160a01b031692638fdcb4c99260048083019391928290030181865afa1580156200142d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001453919062003d75565b6040516024016200146995949392919062003da1565b60408051601f198184030181529181526020820180516001600160e01b031663c21dda4f60e01b179052516001600160e01b031960e086901b168152620014b69392919060040162003df3565b600060405180830381600087803b158015620014d157600080fd5b505af1158015620014e6573d6000803e3d6000fd5b50506021546200150492506001600160a01b03169050848662002047565b60405163c88a5e6d60e01b81526000805160206200571f8339815191529063c88a5e6d906200153a908690869060040162003cdd565b600060405180830381600087803b1580156200155557600080fd5b505af11580156200156a573d6000803e3d6000fd5b50506040516303223eab60e11b81526001600160a01b03861660048201526000805160206200571f83398151915292506306447d569150602401600060405180830381600087803b158015620015bf57600080fd5b505af1158015620015d4573d6000803e3d6000fd5b5050602154601f5460405163095ea7b360e01b81526001600160a01b03928316945063095ea7b39350620016179261010090920490911690889060040162003cdd565b6020604051808303816000875af115801562001637573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200165d919062003d51565b50601f5460405163c3de453d60e01b81526101009091046001600160a01b03169063c3de453d90849062001698908990899060040162003cdd565b6000604051808303818588803b158015620016b257600080fd5b505af1158015620016c7573d6000803e3d6000fd5b50505050506000805160206200573f83398151915260001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200171a57600080fd5b505af11580156200172f573d6000803e3d6000fd5b5050602154601f546040516370a0823160e01b81526001600160a01b0361010090920482166004820152620017c29450911691506370a0823190602401602060405180830381865afa1580156200178a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017b0919062003cf6565b620017bc868462003e3b565b62002056565b6021546040516370a0823160e01b81526001600160a01b038581166004830152620011b59216906370a0823190602401602060405180830381865afa15801562001810573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001836919062003cf6565b600062002056565b60006200186560405180604001604052806002815260200161746f60f01b81525062002033565b602154601f546040516370a0823160e01b81526101009091046001600160a01b039081166004830152929350670de0b6b3a76400009260009216906370a0823190602401602060405180830381865afa158015620018c7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620018ed919062003cf6565b6021546040519192506000805160206200571f8339815191529163bd6af434916001600160a01b031690819063a9059cbb9062001931908990899060240162003cdd565b60408051808303601f1901815291815260208201805160e094851b6001600160e01b03909116179052519185901b6001600160e01b03191682526200197c9392509060040162003e51565b600060405180830381600087803b1580156200199757600080fd5b505af1158015620019ac573d6000803e3d6000fd5b5050602080546040805163110ff5f160e01b815290516001600160a01b0390921694506328d27d639350849263110ff5f1926004808401938290030181865afa158015620019fe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001a24919062003d75565b601f54604051600262048789608a1b019161010090046001600160a01b03169062001a56908990899060240162003cdd565b60408051601f198184030181529181526020820180516001600160e01b031663f3fef3a360e01b179052516001600160e01b031960e087901b16815262001aa99493929190620186a09060040162003e7f565b6020604051808303816000875af115801562001ac9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001aef919062003cf6565b506021546040516370a0823160e01b81526001600160a01b03858116600483015262001b6b9216906370a0823190602401602060405180830381865afa15801562001b3e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001b64919062003cf6565b8362002056565b602154601f546040516370a0823160e01b81526101009091046001600160a01b03908116600483015262001bf49216906370a0823190602401602060405180830381865afa15801562001bc2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001be8919062003cf6565b620017bc848462003ebf565b505050565b60225460405163ca669fa760e01b81526001600160a01b0390911660048201526000805160206200571f8339815191529063ca669fa790602401600060405180830381600087803b15801562001c4e57600080fd5b505af115801562001c63573d6000803e3d6000fd5b50505050601f60019054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562001cb857600080fd5b505af115801562001ccd573d6000803e3d6000fd5b5050601f54604080516309839a9360e01b8152905162001dbb94506101009092046001600160a01b0316925063241b71bb9183916309839a939160048083019260209291908290030181865afa15801562001d2c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001d52919062003cf6565b6040518263ffffffff1660e01b815260040162001d7191815260200190565b602060405180830381865afa15801562001d8f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001db5919062003d51565b620020c1565b601f54604080516304bae1ef60e31b8152905162001e159261010090046001600160a01b03169163241b71bb9183916325d70f789160048083019260209291908290030181865afa15801562001d2c573d6000803e3d6000fd5b60225460405163ca669fa760e01b81526001600160a01b0390911660048201526000805160206200571f8339815191529063ca669fa790602401600060405180830381600087803b15801562001e6a57600080fd5b505af115801562001e7f573d6000803e3d6000fd5b50505050601f60019054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562001ed457600080fd5b505af115801562001ee9573d6000803e3d6000fd5b5050601f54604080516309839a9360e01b8152905162001fd794506101009092046001600160a01b0316925063241b71bb9183916309839a939160048083019260209291908290030181865afa15801562001f48573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f6e919062003cf6565b6040518263ffffffff1660e01b815260040162001f8d91815260200190565b602060405180830381865afa15801562001fab573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001fd1919062003d51565b6200211f565b601f54604080516304bae1ef60e31b81529051620020319261010090046001600160a01b03169163241b71bb9183916325d70f789160048083019260209291908290030181865afa15801562001f48573d6000803e3d6000fd5b565b6000620020408262002154565b5092915050565b62001bf4838383600062002269565b60405163260a5b1560e21b815260048101839052602481018290526000805160206200571f833981519152906398296c549060440160006040518083038186803b158015620020a457600080fd5b505afa158015620020b9573d6000803e3d6000fd5b505050505050565b604051630c9fd58160e01b815281151560048201526000805160206200571f83398151915290630c9fd581906024015b60006040518083038186803b1580156200210a57600080fd5b505afa158015620011b5573d6000803e3d6000fd5b60405163a598288560e01b815281151560048201526000805160206200571f8339815191529063a598288590602401620020f1565b600080826040516020016200216a919062003ed5565b60408051808303601f190181529082905280516020909101206001625e79b760e01b031982526004820181905291506000805160206200571f8339815191529063ffa1864990602401602060405180830381865afa158015620021d1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620021f7919062003d10565b6040516318caf8e360e31b81529092506000805160206200571f8339815191529063c657c7189062002230908590879060040162003e51565b600060405180830381600087803b1580156200224b57600080fd5b505af115801562002260573d6000803e3d6000fd5b50505050915091565b604080516001600160a01b0385811660248084019190915283518084039091018152604490920183526020820180516001600160e01b03166370a0823160e01b1790529151600092871691620022bf9162003ed5565b600060405180830381855afa9150503d8060008114620022fc576040519150601f19603f3d011682016040523d82523d6000602084013e62002301565b606091505b509150506000818060200190518101906200231d919062003cf6565b905062002357846200235087620023496370a0823160e01b62002342600d8d6200246e565b9062002498565b90620024b6565b90620024e2565b8215620020b95760408051600481526024810182526020810180516001600160e01b03166318160ddd60e01b17905290516000916001600160a01b03891691620023a2919062003ed5565b600060405180830381855afa9150503d8060008114620023df576040519150601f19603f3d011682016040523d82523d6000602084013e620023e4565b606091505b5091505060008180602001905181019062002400919062003cf6565b9050828610156200242b5762002417868462003ebf565b62002423908262003ebf565b905062002446565b62002437838762003ebf565b62002443908262003e3b565b90505b6200246481620023506318160ddd60e01b62002342600d8d6200246e565b5050505050505050565b6004820180546001600160a01b0319166001600160a01b0383161790556000825b90505b92915050565b60028201805463ffffffff191660e083901c1790556000826200248f565b6001808301805491820181556000908152602081206001600160a01b038416920191909155826200248f565b6200055882826004820154600283015460038401546001600160a01b039092169160e09190911b90600062002517866200293c565b6001600160a01b0385166000908152602088815260408083206001600160e01b03198816845282528083209051939450926200255891859187910162003ef3565b60408051601f198184030181529181528151602092830120835290820192909252016000206003015460ff1662002598576200259686600062002a54565b505b6001600160a01b0384166000908152602087815260408083206001600160e01b0319871684528252808320905190918391620025d991869188910162003ef3565b604051602081830303815290604052805190602001208152602001908152602001600020905060008160020154826001015462002617919062003e3b565b1115620027135760008160020154826001015462002636919062003e3b565b620026449061010062003ebf565b6200265190600262004014565b60405163348051d760e11b815260048101829052909150818810906000805160206200571f83398151915290636900a3ae90602401600060405180830381865afa158015620026a4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620026ce91908101906200406c565b604051602001620026e091906200410b565b60405160208183030381529060405290620027105760405162461bcd60e51b81526004016200052691906200418b565b50505b8054604051630667f9d760e41b81526000916000805160206200571f8339815191529163667f9d70916200274d918a919060040162003cdd565b602060405180830381865afa1580156200276b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002791919062003cf6565b6001838101546002850154929350600092908101610100039190911b60001901811b1983169089901b1783546040516370ca10bb60e01b81529192506000805160206200571f833981519152916370ca10bb91620027f7918b9190869060040162003d30565b600060405180830381600087803b1580156200281257600080fd5b505af115801562002827573d6000803e3d6000fd5b50505050600080620028398b62002a6a565b915091508115806200284b5750898114155b15620029245784546040516370ca10bb60e01b81526000805160206200571f833981519152916370ca10bb9162002889918d91899060040162003d30565b600060405180830381600087803b158015620028a457600080fd5b505af1158015620028b9573d6000803e3d6000fd5b505060405162461bcd60e51b815260206004820152603360248201527f73746453746f726167652066696e642853746453746f72616765293a204661696044820152723632b2103a37903bb934ba32903b30b63ab29760691b60648201526084019150620005269050565b6200292f8b62002b41565b5050505050505050505050565b60608160070180546200294f9062003c34565b9050600003620029b8576200249282600101805480602002602001604051908101604052809291908181526020018280548015620029ad57602002820191906000526020600020905b81548152602001906001019080831162002998575b505050505062002b4f565b816007018054620029c99062003c34565b80601f0160208091040260200160405190810160405280929190818152602001828054620029f79062003c34565b801562002a485780601f1062002a1c5761010080835404028352916020019162002a48565b820191906000526020600020905b81548152906001019060200180831162002a2a57829003601f168201915b50505050509050919050565b600062002a62838362002bef565b549392505050565b60028101546000908190819060e01b62002a84856200293c565b60405160200162002a97929190620041a0565b60408051601f1981840301815290829052600486015490925060009182916001600160a01b03169062002acc90859062003ed5565b600060405180830381855afa9150503d806000811462002b09576040519150601f19603f3d011682016040523d82523d6000602084013e62002b0e565b606091505b5091509150600062002b33828860030154602062002b2d9190620041d3565b62003359565b929792965091945050505050565b62002b4c81620033d7565b50565b606060008251602062002b639190620041d3565b67ffffffffffffffff81111562002b7e5762002b7e62004022565b6040519080825280601f01601f19166020018201604052801562002ba9576020820181803683370190505b50905060005b83518110156200204057600084828151811062002bd05762002bd0620041ed565b6020908102919091018101518382028501909101525060010162002baf565b6004820154600283015460038401546000926001600160a01b03169160e01b908362002c1b876200293c565b6001600160a01b0385166000908152602089815260408083206001600160e01b031988168452825280832090519394509262002c5c91859187910162003ef3565b60408051601f198184030181529181528151602092830120835290820192909252016000206003015460ff161562002d1057851562002ca05762002ca087620033d7565b6001600160a01b0384166000908152602088815260408083206001600160e01b0319871684528252808320905190929162002ce091859187910162003ef3565b60405160208183030381529060405280519060200120815260200190815260200160002094505050505062002492565b6000805160206200573f83398151915260001c6001600160a01b031663266cf1096040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562002d5e57600080fd5b505af115801562002d73573d6000803e3d6000fd5b50505050600062002d848862002a6a565b6040516365bc948160e01b81526001600160a01b0388166004820152909250600091506000805160206200571f833981519152906365bc9481906024016000604051808303816000875af115801562002de1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262002e0b91908101906200428c565b509050805160000362002e89576040805162461bcd60e51b81526020600482015260248101919091527f73746453746f726167652066696e642853746453746f72616765293a204e6f2060448201527f73746f726167652075736520646574656374656420666f72207461726765742e606482015260840162000526565b80515b600062002e9982620042f7565b91508110620032025760006000805160206200573f83398151915260001c6001600160a01b031663667f9d708985858151811062002edb5762002edb620041ed565b60200260200101516040518363ffffffff1660e01b815260040162002f0292919062003cdd565b602060405180830381865afa15801562002f20573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002f46919062003cf6565b90508062002fa9577f080fc4a96620c4462e705b23f346413fe3796bb63c6f8d8591baec0e231577a58884848151811062002f855762002f85620041ed565b602002602001015160001c60405162002fa092919062003cdd565b60405180910390a15b62002fd18b84848151811062002fc35762002fc3620041ed565b60200260200101516200342d565b62002fdd575062002e8c565b60068b0154600090819060ff1615620030335760006200301a8e8787815181106200300c576200300c620041ed565b602002602001015162003602565b909450925090508062003031575050505062002e8c565b505b6001828201610100031b60001901811b8316811c86811462003059575050505062002e8c565b7f9c9555b1e3102e3cf48f427d79cb678f5d9bd1ed0ad574389461e255f95170ed8b8b8a8c6040516020016200309192919062003ef3565b60405160208183030381529060405280519060200120898981518110620030bc57620030bc620041ed565b602090810291909101810151604080516001600160a01b0390961686526001600160e01b03199094169185019190915291830152606082015260800160405180910390a16040518060800160405280878781518110620031205762003120620041ed565b602002602001015160001c8152602001848152602001838152602001600115158152508e60000160008d6001600160a01b03166001600160a01b0316815260200190815260200160002060008c6001600160e01b0319166001600160e01b031916815260200190815260200160002060008a8c604051602001620031a692919062003ef3565b60408051808303601f190181529181528151602092830120835282820193909352908201600020835181559083015160018201559082015160028201556060909101516003909101805460ff1916911515919091179055505050505b506001600160a01b038616600090815260208a815260408083206001600160e01b031989168452825280832090519092916200324391879189910162003ef3565b60408051601f198184030181529181528151602092830120835290820192909252016000206003015460ff16620032d55760405162461bcd60e51b815260206004820152602f60248201527f73746453746f726167652066696e642853746453746f72616765293a20536c6f60448201526e3a143994903737ba103337bab7321760891b606482015260840162000526565b8715620032e757620032e789620033d7565b6001600160a01b038616600090815260208a815260408083206001600160e01b031989168452825280832090519092916200332791879189910162003ef3565b604051602081830303815290604052805190602001208152602001908152602001600020965050505050505092915050565b600080600060208551116200337057845162003373565b60205b905060005b81811015620033cd576200338e816008620041d3565b866200339b838862003e3b565b81518110620033ae57620033ae620041ed565b01602001516001600160f81b031916901c929092179160010162003378565b5090949350505050565b6004810180546001600160a01b031916905560028101805463ffffffff191690556200340860018201600062003867565b60006003820181905560068201805460ff1916905562002b4c90600783019062003887565b600480830154604051630667f9d760e41b815260009283926000805160206200571f8339815191529263667f9d709262003474926001600160a01b03169188910162003cdd565b602060405180830381865afa15801562003492573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620034b8919062003cf6565b9050600080620034c88662002a6a565b909250905060008115620034de576000620034e2565b6000195b6004808901546040516370ca10bb60e01b81529293506000805160206200571f833981519152926370ca10bb9262003529926001600160a01b0316918b9187910162003d30565b600060405180830381600087803b1580156200354457600080fd5b505af115801562003559573d6000803e3d6000fd5b5050505060006200356a8862002a6a565b60048a8101546040516370ca10bb60e01b81529294506000805160206200571f83398151915293506370ca10bb92620035b4926001600160a01b03909216918c918b910162003d30565b600060405180830381600087803b158015620035cf57600080fd5b505af1158015620035e4573d6000803e3d6000fd5b50505050838015620035f65750808314155b98975050505050505050565b600482810154604051630667f9d760e41b81526000928392839283926000805160206200571f8339815191529263667f9d70926200364f926001600160a01b03909216918a910162003cdd565b602060405180830381865afa1580156200366d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003693919062003cf6565b9050600080620036a68888600162003756565b91509150600080620036bb8a8a600062003756565b60048c8101546040516370ca10bb60e01b81529395509193506000805160206200571f833981519152926370ca10bb9262003707926001600160a01b03909116918e918b910162003d30565b600060405180830381600087803b1580156200372257600080fd5b505af115801562003737573d6000803e3d6000fd5b50505050838015620037465750815b9a92995097509095505050505050565b60008060005b610100811015620038485760008462003779576001821b6200378b565b620037868260ff62003ebf565b6001901b5b6004808901546040516370ca10bb60e01b81529293506000805160206200571f833981519152926370ca10bb92620037d2926001600160a01b0316918b9187910162003d30565b600060405180830381600087803b158015620037ed57600080fd5b505af115801562003802573d6000803e3d6000fd5b50505050600080620038148962002a6a565b915091508180156200382557508015155b156200383c57600184955095505050505062003851565b5050506001016200375c565b50600080915091505b935093915050565b61140d806200431283390190565b508054600082559060005260206000209081019062002b4c9190620038c1565b508054620038959062003c34565b6000825580601f10620038a6575050565b601f01602090049060005260206000209081019062002b4c91905b5b80821115620038d85760008155600101620038c2565b5090565b6020808252825182820181905260009190848201906040850190845b818110156200391f5783516001600160a01b031683529284019291840191600101620038f8565b50909695505050505050565b60005b83811015620039485781810151838201526020016200392e565b50506000910152565b600081518084526200396b8160208601602086016200392b565b601f01601f19169290920160200192915050565b602080825282518282018190526000919060409081850190600581811b8701840188860187805b8581101562003a3557603f198b8503018752825180516001600160a01b031685528901518985018990528051898601819052908a0190606081881b870181019190870190855b8181101562003a1e57605f1989850301835262003a0b84865162003951565b948e01949350918d0191600101620039ec565b505050978a019794505091880191600101620039a6565b50919a9950505050505050505050565b6001600160a01b038116811462002b4c57600080fd5b60006020828403121562003a6e57600080fd5b813562003a7b8162003a45565b9392505050565b60008151808452602080850194506020840160005b8381101562003abf5781516001600160e01b0319168752958201959082019060010162003a97565b509495945050505050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b8381101562003b4957888303603f190185528151805187855262003b1a8886018262003951565b91890151858303868b015291905062003b34818362003a82565b96890196945050509086019060010162003af3565b509098975050505050505050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101562003bb257603f1988860301845262003b9f85835162003951565b9450928501929085019060010162003b80565b5092979650505050505050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b8381101562003b4957888303603f19018552815180516001600160a01b0316845287015187840187905262003c208785018262003a82565b958801959350509086019060010162003be8565b600181811c9082168062003c4957607f821691505b60208210810362003c6a57634e487b7160e01b600052602260045260246000fd5b50919050565b60008060006060848603121562003c8657600080fd5b83516005811062003c9657600080fd5b602085015190935062003ca98162003a45565b604085015190925062003cbc8162003a45565b809150509250925092565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b03929092168252602082015260400190565b60006020828403121562003d0957600080fd5b5051919050565b60006020828403121562003d2357600080fd5b815162003a7b8162003a45565b6001600160a01b039390931683526020830191909152604082015260600190565b60006020828403121562003d6457600080fd5b8151801515811462003a7b57600080fd5b60006020828403121562003d8857600080fd5b815167ffffffffffffffff8116811462003a7b57600080fd5b600067ffffffffffffffff808816835260ff8716602084015260018060a01b038616604084015260a0606084015262003dde60a084018662003951565b91508084166080840152509695505050505050565b60018060a01b038416815282602082015260606040820152600062003e1c606083018462003951565b95945050505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111562002492576200249262003e25565b6001600160a01b038316815260406020820181905260009062003e779083018462003951565b949350505050565b67ffffffffffffffff86811682526001600160a01b0386811660208401528516604083015260a0606083018190526000919062003dde9084018662003951565b8181038181111562002492576200249262003e25565b6000825162003ee98184602087016200392b565b9190910192915050565b6000835162003f078184602088016200392b565b9190910191825250602001919050565b600181815b8085111562003f5857816000190482111562003f3c5762003f3c62003e25565b8085161562003f4a57918102915b93841c939080029062003f1c565b509250929050565b60008262003f715750600162002492565b8162003f805750600062002492565b816001811462003f99576002811462003fa45762003fc4565b600191505062002492565b60ff84111562003fb85762003fb862003e25565b50506001821b62002492565b5060208310610133831016604e8410600b841016171562003fe9575081810a62002492565b62003ff5838362003f17565b80600019048211156200400c576200400c62003e25565b029392505050565b60006200248f838362003f60565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171562004064576200406462004022565b604052919050565b6000602082840312156200407f57600080fd5b815167ffffffffffffffff808211156200409857600080fd5b818401915084601f830112620040ad57600080fd5b815181811115620040c257620040c262004022565b620040d7601f8201601f191660200162004038565b9150808252856020828501011115620040ef57600080fd5b620041028160208401602086016200392b565b50949350505050565b7f73746453746f726167652066696e642853746453746f72616765293a2050616381527f6b656420736c6f742e2057652063616e2774206669742076616c756520677265602082015269030ba32b9103a3430b7160b51b6040820152600082516200417e81604a8501602087016200392b565b91909101604a0192915050565b6020815260006200248f602083018462003951565b6001600160e01b0319831681528151600090620041c58160048501602087016200392b565b919091016004019392505050565b808202811582820484141762002492576200249262003e25565b634e487b7160e01b600052603260045260246000fd5b600082601f8301126200421557600080fd5b8151602067ffffffffffffffff82111562004234576200423462004022565b8160051b6200424582820162004038565b92835284810182019282810190878511156200426057600080fd5b83870192505b84831015620042815782518252918301919083019062004266565b979650505050505050565b60008060408385031215620042a057600080fd5b825167ffffffffffffffff80821115620042b957600080fd5b620042c78683870162004203565b93506020850151915080821115620042de57600080fd5b50620042ed8582860162004203565b9150509250929050565b60008162004309576200430962003e25565b50600019019056fe60c0604052600080546001600160a01b0319167301004e20000000000000520800000000004c4b4017905534801561003657600080fd5b506001600160401b03461660805260a660a052604051633b9aca009061005b906100a3565b908152602001604051809103906000f08015801561007d573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b03929092169190911790556100b0565b6101d08061123d83390190565b60805160a0516111616100dc60003960006101a30152600081816104450152610a5601526111616000f3fe60806040526004361061014b5760003560e01c80636739afca116100b6578063b2b2f5bd1161006f578063b2b2f5bd146104cb578063b4d5afd1146104ff578063c21dda4f14610534578063c26dfc0514610547578063cf84c81814610569578063d051c97d1461058957600080fd5b80636739afca146103ca57806378fe5307146103ec5780638dd9523c146104135780639a8a059214610433578063a32eb7c614610467578063aaf1bc971461049b57600080fd5b80632f32700e116101085780632f32700e1461026b5780633aa87330146102d05780633fd3b15e14610311578063500b19e71461035257806355e2448e1461038a57806366a1eaf3146103aa57600080fd5b80630360d20f1461015057806306c3dc5f1461017c578063110ff5f11461019157806324278bbe146101dd57806328d27d631461021d5780632cc3d3541461024b575b600080fd5b34801561015c57600080fd5b50610165600281565b60405160ff90911681526020015b60405180910390f35b34801561018857600080fd5b50610165600381565b34801561019d57600080fd5b506101c57f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160401b039091168152602001610173565b3480156101e957600080fd5b5061020d6101f8366004610ccb565b60066020526000908152604090205460ff1681565b6040519015158152602001610173565b34801561022957600080fd5b5061023d610238366004610d4c565b6105ca565b604051908152602001610173565b34801561025757600080fd5b5061023d610266366004610dd0565b6107e2565b34801561027757600080fd5b506040805180820182526000808252602091820152815180830183526007546001600160401b0381168083526001600160a01b03600160401b909204821692840192835284519081529151169181019190915201610173565b3480156102dc57600080fd5b506101c56102eb366004610e45565b60026020908152600092835260408084209091529082529020546001600160401b031681565b34801561031d57600080fd5b506101c561032c366004610e45565b60046020908152600092835260408084209091529082529020546001600160401b031681565b34801561035e57600080fd5b50600154610372906001600160a01b031681565b6040516001600160a01b039091168152602001610173565b34801561039657600080fd5b506007546001600160401b0316151561020d565b3480156103b657600080fd5b506103c86103c5366004610e78565b50565b005b3480156103d657600080fd5b506103df6108c8565b6040516101739190610eb3565b3480156103f857600080fd5b506000546101c590600160401b90046001600160401b031681565b34801561041f57600080fd5b5061023d61042e366004610f64565b61090e565b34801561043f57600080fd5b506101c57f000000000000000000000000000000000000000000000000000000000000000081565b34801561047357600080fd5b5061023d7ffeccba1cfc4544bf9cd83b76f36ae5c464750b6c43f682e26744ee21ec31fc1e81565b3480156104a757600080fd5b5061020d6104b6366004610ccb565b60056020526000908152604090205460ff1681565b3480156104d757600080fd5b5061023d7fa06a0c1264badca141841b5f52470407dac9adaaa539dd445540986341b73a6881565b34801561050b57600080fd5b5060005461052190600160801b900461ffff1681565b60405161ffff9091168152602001610173565b6103c8610542366004610fc8565b61098f565b34801561055357600080fd5b5060005461052190600160901b900461ffff1681565b34801561057557600080fd5b506000546101c5906001600160401b031681565b34801561059557600080fd5b506101c56105a4366004610e45565b60036020908152600092835260408084209091529082529020546001600160401b031681565b600080546001600160401b03908116908316111561062f5760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e69506f7274616c3a206761734c696d697420746f6f206869676800000060448201526064015b60405180910390fd5b6000546001600160401b03600160401b909104811690831610156106955760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a206761734c696d697420746f6f206c6f77000000006044820152606401610626565b604080518082019091526001600160401b0388168082526001600160a01b0388166020909201829052600780546001600160e01b031916909117600160401b9092029190911790555a9050600080866001600160a01b0316846001600160401b03168787604051610707929190611000565b60006040518083038160008787f1925050503d8060008114610745576040519150601f19603f3d011682016040523d82523d6000602084013e61074a565b606091505b50915091505a61075a9084611026565b600780546001600160e01b03191690559250811580156107835750836001600160401b03168310155b156107c95760405162461bcd60e51b81526020600482015260166024820152754d6f636b506f7274616c3a206f7574206f662067617360501b6044820152606401610626565b816107d657805160208201fd5b50509695505050505050565b604080518082019091526001600160401b0386168082526001600160a01b0386166020909201829052600780546001600160e01b031916909117600160401b90920291909117905560005a9050600080856001600160a01b0316858560405161084c929190611000565b6000604051808303816000865af19150503d8060008114610889576040519150601f19603f3d011682016040523d82523d6000602084013e61088e565b606091505b50915091505a61089e9084611026565b600780546001600160e01b03191690559250816108bd57805160208201fd5b505095945050505050565b60408051600080825260208201909252606091610908565b6040805180820190915260008152606060208201528152602001906001900390816108e05790505b50905090565b600154604051632376548f60e21b81526000916001600160a01b031690638dd9523c90610945908890889088908890600401611068565b602060405180830381865afa158015610962573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061098691906110a0565b95945050505050565b6000546001600160401b0390811690821611156109ee5760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e69506f7274616c3a206761734c696d697420746f6f20686967680000006044820152606401610626565b6000546001600160401b03600160401b90910481169082161015610a545760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a206761734c696d697420746f6f206c6f77000000006044820152606401610626565b7f00000000000000000000000000000000000000000000000000000000000000006001600160401b0316866001600160401b031603610ad55760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a20756e737570706f727465642064657374000000006044820152606401610626565b6001600160401b038616610b2b5760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a20756e737570706f727465642064657374000000006044820152606401610626565b6001600160a01b038416610b815760405162461bcd60e51b815260206004820152601b60248201527f4f6d6e69506f7274616c3a206e6f20706f7274616c207863616c6c00000000006044820152606401610626565b6000610b8f8785858561090e565b905080341015610be15760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a20696e73756666696369656e7420666565000000006044820152606401610626565b6001600160401b03808816600090815260026020908152604080832060ff8b1680855292528220805491936001939192610c1d918591166110b9565b82546101009290920a6001600160401b0381810219909316918316021790915589811660008181526002602090815260408083208786168085529252918290205491519190931693507fb7c8eb9d7a7fbcdab809ab7b8a7c41701eb3115e3fe99d30ff490d8552f72bfa90610c9d9033908c908c908c908c908c906110e0565b60405180910390a45050505050505050565b80356001600160401b0381168114610cc657600080fd5b919050565b600060208284031215610cdd57600080fd5b610ce682610caf565b9392505050565b80356001600160a01b0381168114610cc657600080fd5b60008083601f840112610d1657600080fd5b5081356001600160401b03811115610d2d57600080fd5b602083019150836020828501011115610d4557600080fd5b9250929050565b60008060008060008060a08789031215610d6557600080fd5b610d6e87610caf565b9550610d7c60208801610ced565b9450610d8a60408801610ced565b935060608701356001600160401b03811115610da557600080fd5b610db189828a01610d04565b9094509250610dc4905060808801610caf565b90509295509295509295565b600080600080600060808688031215610de857600080fd5b610df186610caf565b9450610dff60208701610ced565b9350610e0d60408701610ced565b925060608601356001600160401b03811115610e2857600080fd5b610e3488828901610d04565b969995985093965092949392505050565b60008060408385031215610e5857600080fd5b610e6183610caf565b9150610e6f60208401610caf565b90509250929050565b600060208284031215610e8a57600080fd5b81356001600160401b03811115610ea057600080fd5b82016101808185031215610ce657600080fd5b600060208083018184528085518083526040925060408601915060408160051b8701018488016000805b84811015610f5557898403603f19018652825180516001600160401b039081168652908901518986018990528051898701819052908a0191849160608801905b80841015610f3f57845183168252938c019360019390930192908c0190610f1d565b50988b0198965050509288019250600101610edd565b50919998505050505050505050565b60008060008060608587031215610f7a57600080fd5b610f8385610caf565b935060208501356001600160401b03811115610f9e57600080fd5b610faa87828801610d04565b9094509250610fbd905060408601610caf565b905092959194509250565b60008060008060008060a08789031215610fe157600080fd5b610fea87610caf565b9550602087013560ff81168114610d7c57600080fd5b8183823760009101908152919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561103957611039611010565b92915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60006001600160401b0380871683526060602084015261108c60608401868861103f565b915080841660408401525095945050505050565b6000602082840312156110b257600080fd5b5051919050565b6001600160401b038181168382160190808211156110d9576110d9611010565b5092915050565b6001600160a01b0387811682528616602082015260a06040820181905260009061110d908301868861103f565b6001600160401b03949094166060830152506080015294935050505056fea2646970667358221220fd7b887f78d4d6f8b128aeff3bca8f522590cf1ade5c373d54b1d4a974105a0564736f6c63430008180033608060405234801561001057600080fd5b506040516101d03803806101d083398101604081905261002f91610037565b600055610050565b60006020828403121561004957600080fd5b5051919050565b6101718061005f6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806354fd4d50146100465780638dd9523c1461005a578063ddca3f4314610081575b600080fd5b604051600181526020015b60405180910390f35b6100736100683660046100a7565b600054949350505050565b604051908152602001610051565b61007360005481565b803567ffffffffffffffff811681146100a257600080fd5b919050565b600080600080606085870312156100bd57600080fd5b6100c68561008a565b9350602085013567ffffffffffffffff808211156100e357600080fd5b818701915087601f8301126100f757600080fd5b81358181111561010657600080fd5b88602082850101111561011857600080fd5b6020830195508094505050506101306040860161008a565b90509295919450925056fea2646970667358221220590210d19b70b700525ca08edfb5f66d40cc1e65dbe3999c4a70b839b2075d9464736f6c634300081800330000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12d885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12da26469706673582212206547cfbbc99bd5505ad78fbb418888f4c51526e02c782085a2f3264d03e8d0cd64736f6c634300081800330000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12d885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12da26469706673582212205b91c14d4aaa69e397411c2c0d2889882f4e806c2f6acb2463bf46a8f0cd8c9764736f6c63430008180033", + Bin: "0x6080604052600c805462ff00ff19166201000117905534801561002157600080fd5b5062022bf380620000336000396000f3fe60806040523480156200001157600080fd5b5060043610620001755760003560e01c80639452e25f11620000d3578063c7a275ae1162000086578063c7a275ae146200031a578063cec93a7a1462000331578063cfbf9af71462000348578063d3919d63146200035f578063d9ce4ea91462000376578063f8ccbf47146200038d57600080fd5b80639452e25f1462000290578063a71b82f314620002a7578063ad16106214620002be578063b90b3ffb14620002d5578063becbbd8414620002ec578063c206ac67146200030357600080fd5b80635a92ef23116200012c5780635a92ef2314620002065780635dcb0792146200021d578063626812e314620002345780636e7a9833146200024b5780637924b9b314620002625780637be88400146200027957600080fd5b806308de3fd4146200017a5780631a2b9c80146200019357806323c325eb14620001aa5780633e1f7dbc14620001c15780634bbad78a14620001d85780634be3be6214620001ef575b600080fd5b620001916200018b36600462003aef565b620003b5565b005b62000191620001a436600462003aef565b620004f3565b62000191620001bb36600462003b8c565b62000595565b62000191620001d236600462003c11565b620006ad565b62000191620001e936600462003aef565b620013f5565b620001916200020036600462003c7d565b62001497565b620001916200021736600462003c11565b62001951565b620001916200022e36600462003cc4565b62001a7e565b620001916200024536600462003c11565b62001bab565b620001916200025c36600462003b8c565b62001f80565b620001916200027336600462003c11565b62001ffa565b620001916200028a36600462003b8c565b6200211e565b62000191620002a136600462003b8c565b62002198565b62000191620002b836600462003d02565b62002212565b62000191620002cf36600462003b8c565b62002433565b62000191620002e636600462003cc4565b620024ad565b62000191620002fd36600462003cc4565b62002555565b620001916200031436600462003aef565b620025fd565b620001916200032b36600462003cc4565b6200269f565b620001916200034236600462003d02565b62002747565b620001916200035936600462003cc4565b62002968565b620001916200037036600462003b8c565b62002a10565b620001916200038736600462003cc4565b6200351e565b600c54620003a19062010000900460ff1681565b604051901515815260200160405180910390f35b604051637fec2a8d60e01b81526001600160a01b0384166004820152839060008051602062022b7e83398151915290637fec2a8d90602401600060405180830381600087803b1580156200040857600080fd5b505af11580156200041d573d6000803e3d6000fd5b505060405163d533b44560e01b81526001600160401b03851660048201526001600160a01b038616925063d533b44591506024015b600060405180830381600087803b1580156200046d57600080fd5b505af115801562000482573d6000803e3d6000fd5b5050505060008051602062022b9e83398151915260001c6001600160a01b03166376eadd366040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620004d457600080fd5b505af1158015620004e9573d6000803e3d6000fd5b5050505050505050565b604051637fec2a8d60e01b81526001600160a01b0384166004820152839060008051602062022b7e83398151915290637fec2a8d90602401600060405180830381600087803b1580156200054657600080fd5b505af11580156200055b573d6000803e3d6000fd5b50506040516315fd043360e31b81526001600160401b03851660048201526001600160a01b038616925063afe82198915060240162000452565b604051637fec2a8d60e01b81526001600160a01b038516600482015260008051602062022b7e83398151915290637fec2a8d90602401600060405180830381600087803b158015620005e657600080fd5b505af1158015620005fb573d6000803e3d6000fd5b5050505060006040516200060f90620039fc565b604051809103906000f0801580156200062c573d6000803e3d6000fd5b50905060008051602062022b9e83398151915260001c6001600160a01b03166376eadd366040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200067d57600080fd5b505af115801562000692573d6000803e3d6000fd5b50505050620006a58685838686620035c6565b505050505050565b6000600262048789608a1b0190506000816001600160a01b031663241b71bb836001600160a01b031663a10ac97a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200070b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000731919062003d48565b6040518263ffffffff1660e01b81526004016200075091815260200190565b602060405180830381865afa1580156200076e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000794919062003d62565b90506000826001600160a01b031663241b71bb846001600160a01b03166309839a936040518163ffffffff1660e01b8152600401602060405180830381865afa158015620007e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200080c919062003d48565b6040518263ffffffff1660e01b81526004016200082b91815260200190565b602060405180830381865afa15801562000849573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200086f919062003d62565b90506000836001600160a01b031663241b71bb856001600160a01b03166325d70f786040518163ffffffff1660e01b8152600401602060405180830381865afa158015620008c1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008e7919062003d48565b6040518263ffffffff1660e01b81526004016200090691815260200190565b602060405180830381865afa15801562000924573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200094a919062003d62565b90506000846001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200098d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620009b3919062003d8d565b90506000856001600160a01b03166339acf9f16040518163ffffffff1660e01b8152600401602060405180830381865afa158015620009f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a1c919062003d8d565b90506000866001600160a01b031663969b53da6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a5f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a85919062003d8d565b90506000876001600160a01b03166312622e5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000ac8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000aee919062003dad565b90506000886001600160a01b03166323b051d96040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000b31573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b57919062003d48565b604051637fec2a8d60e01b81526001600160a01b038e16600482015290915060008051602062022b7e83398151915290637fec2a8d90602401600060405180830381600087803b15801562000bab57600080fd5b505af115801562000bc0573d6000803e3d6000fd5b50505050600060405162000bd49062003a0a565b604051809103906000f08015801562000bf1573d6000803e3d6000fd5b50905060008051602062022b9e83398151915260001c6001600160a01b03166376eadd366040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000c4257600080fd5b505af115801562000c57573d6000803e3d6000fd5b5050505062000c738e600262048789608a1b01838f8f620035c6565b856001600160a01b03168a6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000cbc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ce2919062003d8d565b6001600160a01b03161462000d145760405162461bcd60e51b815260040162000d0b9062003dcd565b60405180910390fd5b826001600160401b03168a6001600160a01b03166312622e5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000d5d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000d83919062003dad565b6001600160401b03161462000dcf5760405162461bcd60e51b81526020600482015260116024820152701b0c50da185a5b92590818da185b99d959607a1b604482015260640162000d0b565b846001600160a01b03168a6001600160a01b03166339acf9f16040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000e18573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e3e919062003d8d565b6001600160a01b03161462000e855760405162461bcd60e51b815260206004820152600c60248201526b1bdb5b9a4818da185b99d95960a21b604482015260640162000d0b565b818a6001600160a01b03166332c8bb776040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000ec5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000eeb919062003d48565b1462000f2f5760405162461bcd60e51b81526020600482015260126024820152711b0c51195c1bdcda5d1cc818da185b99d95960721b604482015260640162000d0b565b836001600160a01b03168a6001600160a01b031663969b53da6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000f78573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000f9e919062003d8d565b6001600160a01b03161462000fe95760405162461bcd60e51b815260206004820152601060248201526f1b0c509c9a5919d94818da185b99d95960821b604482015260640162000d0b565b8815158a6001600160a01b031663241b71bb8c6001600160a01b031663a10ac97a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200103a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001060919062003d48565b6040518263ffffffff1660e01b81526004016200107f91815260200190565b602060405180830381865afa1580156200109d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010c3919062003d62565b1515146200110f5760405162461bcd60e51b8152602060048201526018602482015277185b1b081c185d5cd959081cdd185d194818da185b99d95960421b604482015260640162000d0b565b8715158a6001600160a01b031663241b71bb8c6001600160a01b03166309839a936040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001160573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001186919062003d48565b6040518263ffffffff1660e01b8152600401620011a591815260200190565b602060405180830381865afa158015620011c3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011e9919062003d62565b1515146200123a5760405162461bcd60e51b815260206004820152601b60248201527f62726964676520706175736564207374617465206368616e6765640000000000604482015260640162000d0b565b8615158a6001600160a01b031663241b71bb8c6001600160a01b03166325d70f786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200128b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620012b1919062003d48565b6040518263ffffffff1660e01b8152600401620012d091815260200190565b602060405180830381865afa158015620012ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001314919062003d62565b151514620013655760405162461bcd60e51b815260206004820152601d60248201527f776974686472617720706175736564207374617465206368616e676564000000604482015260640162000d0b565b604051620013739062003a18565b604051809103906000f08015801562001390573d6000803e3d6000fd5b506001600160a01b031663c04062266040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620013cc57600080fd5b505af1158015620013e1573d6000803e3d6000fd5b505050505050505050505050505050505050565b604051637fec2a8d60e01b81526001600160a01b0384166004820152839060008051602062022b7e83398151915290637fec2a8d90602401600060405180830381600087803b1580156200144857600080fd5b505af11580156200145d573d6000803e3d6000fd5b505060405163185f372d60e31b81526001600160401b03851660048201526001600160a01b038616925063c2f9b968915060240162000452565b6000826001600160a01b031663500b19e76040518163ffffffff1660e01b8152600401602060405180830381865afa158015620014d8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620014fe919062003d8d565b9050816001600160a01b0316816001600160a01b031603620015635760405162461bcd60e51b815260206004820152601760248201527f6e657720666565206f7261636c65207265717569726564000000000000000000604482015260640162000d0b565b604051637fec2a8d60e01b81526001600160a01b038516600482015260008051602062022b7e83398151915290637fec2a8d90602401600060405180830381600087803b158015620015b457600080fd5b505af1158015620015c9573d6000803e3d6000fd5b5050604051635454c4b160e11b81526001600160a01b0385811660048301528616925063a8a989629150602401600060405180830381600087803b1580156200161157600080fd5b505af115801562001626573d6000803e3d6000fd5b5050505060008051602062022b9e83398151915260001c6001600160a01b03166376eadd366040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200167857600080fd5b505af11580156200168d573d6000803e3d6000fd5b50505050816001600160a01b0316836001600160a01b031663500b19e76040518163ffffffff1660e01b8152600401602060405180830381865afa158015620016da573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001700919062003d8d565b6001600160a01b031614620017585760405162461bcd60e51b815260206004820152601860248201527f706f7274616c2061737369676e6d656e74206661696c65640000000000000000604482015260640162000d0b565b60006001600160a01b0316826001600160a01b031663481c6a756040518163ffffffff1660e01b8152600401602060405180830381865afa158015620017a2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017c8919062003d8d565b6001600160a01b031603620018205760405162461bcd60e51b815260206004820152601a60248201527f666565206f7261636c65206e6f7420696e697469616c697a6564000000000000604482015260640162000d0b565b816001600160a01b03166354fd4d506040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200185f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001885919062003dad565b6001600160401b0316600214620018df5760405162461bcd60e51b815260206004820152601a60248201527f666565206f7261636c65206e6f74204665654f7261636c655632000000000000604482015260640162000d0b565b604051620018ed9062003a26565b604051809103906000f0801580156200190a573d6000803e3d6000fd5b5060405163148aedc160e21b81526001600160a01b038481166004830152919091169063522bb70490602401600060405180830381600087803b158015620004d457600080fd5b604051637fec2a8d60e01b81526001600160a01b038416600482015260008051602062022b7e83398151915290637fec2a8d90602401600060405180830381600087803b158015620019a257600080fd5b505af1158015620019b7573d6000803e3d6000fd5b505050506000604051620019cb9062003a34565b604051809103906000f080158015620019e8573d6000803e3d6000fd5b50905060008051602062022b9e83398151915260001c6001600160a01b03166376eadd366040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562001a3957600080fd5b505af115801562001a4e573d6000803e3d6000fd5b5050505062001a778573cccccc00000000000000000000000000000000028386866000620035d2565b5050505050565b604051637fec2a8d60e01b81526001600160a01b0383166004820152829060008051602062022b7e83398151915290637fec2a8d90602401600060405180830381600087803b15801562001ad157600080fd5b505af115801562001ae6573d6000803e3d6000fd5b50505050816001600160a01b03166383d0cbd96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562001b2657600080fd5b505af115801562001b3b573d6000803e3d6000fd5b5050505060008051602062022b9e83398151915260001c6001600160a01b03166376eadd366040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562001b8d57600080fd5b505af115801562001ba2573d6000803e3d6000fd5b50505050505050565b6000600162333333608a1b0190506000816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001bfa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c20919062003d8d565b90506000826001600160a01b031663d146fd1b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001c63573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c89919062003d62565b604051637fec2a8d60e01b81526001600160a01b038816600482015290915060008051602062022b7e83398151915290637fec2a8d90602401600060405180830381600087803b15801562001cdd57600080fd5b505af115801562001cf2573d6000803e3d6000fd5b50505050600060405162001d069062003a42565b604051809103906000f08015801562001d23573d6000803e3d6000fd5b50905060008051602062022b9e83398151915260001c6001600160a01b03166376eadd366040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562001d7457600080fd5b505af115801562001d89573d6000803e3d6000fd5b5050505062001da588600162333333608a1b01838989620035c6565b826001600160a01b0316846001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001dee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001e14919062003d8d565b6001600160a01b03161462001e3d5760405162461bcd60e51b815260040162000d0b9062003dcd565b811515846001600160a01b031663d146fd1b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001e7f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001ea5919062003d62565b15151462001ef65760405162461bcd60e51b815260206004820152601a60248201527f6973416c6c6f776c697374456e61626c6564206368616e676564000000000000604482015260640162000d0b565b60405162001f049062003a50565b604051809103906000f08015801562001f21573d6000803e3d6000fd5b506001600160a01b031663c04062266040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562001f5d57600080fd5b505af115801562001f72573d6000803e3d6000fd5b505050505050505050505050565b604051637fec2a8d60e01b81526001600160a01b038516600482015260008051602062022b7e83398151915290637fec2a8d90602401600060405180830381600087803b15801562001fd157600080fd5b505af115801562001fe6573d6000803e3d6000fd5b5050505060006040516200060f9062003a5e565b604051637fec2a8d60e01b81526001600160a01b038416600482015260008051602062022b7e83398151915290637fec2a8d90602401600060405180830381600087803b1580156200204b57600080fd5b505af115801562002060573d6000803e3d6000fd5b505050506000604051620020749062003a6c565b604051809103906000f08015801562002091573d6000803e3d6000fd5b50905060008051602062022b9e83398151915260001c6001600160a01b03166376eadd366040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620020e257600080fd5b505af1158015620020f7573d6000803e3d6000fd5b5050505062001a778573121e240000000000000000000000000000000001838686620035c6565b604051637fec2a8d60e01b81526001600160a01b038516600482015260008051602062022b7e83398151915290637fec2a8d90602401600060405180830381600087803b1580156200216f57600080fd5b505af115801562002184573d6000803e3d6000fd5b5050505060006040516200060f9062003a7a565b604051637fec2a8d60e01b81526001600160a01b038516600482015260008051602062022b7e83398151915290637fec2a8d90602401600060405180830381600087803b158015620021e957600080fd5b505af1158015620021fe573d6000803e3d6000fd5b5050505060006040516200060f9062003a88565b6000829050806001600160a01b03166325d70f786040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002256573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200227c919062003d48565b821480620022ed5750806001600160a01b03166309839a936040518163ffffffff1660e01b8152600401602060405180830381865afa158015620022c4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620022ea919062003d48565b82145b806200235c5750806001600160a01b031663a10ac97a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002333573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002359919062003d48565b82145b6200239b5760405162461bcd60e51b815260206004820152600e60248201526d34b73b30b634b21030b1ba34b7b760911b604482015260640162000d0b565b604051637fec2a8d60e01b81526001600160a01b038516600482015260008051602062022b7e83398151915290637fec2a8d90602401600060405180830381600087803b158015620023ec57600080fd5b505af115801562002401573d6000803e3d6000fd5b5050604051632f4dae9f60e01b8152600481018590526001600160a01b0384169250632f4dae9f915060240162000452565b604051637fec2a8d60e01b81526001600160a01b038516600482015260008051602062022b7e83398151915290637fec2a8d90602401600060405180830381600087803b1580156200248457600080fd5b505af115801562002499573d6000803e3d6000fd5b5050505060006040516200060f9062003a96565b604051637fec2a8d60e01b81526001600160a01b0383166004820152829060008051602062022b7e83398151915290637fec2a8d90602401600060405180830381600087803b1580156200250057600080fd5b505af115801562002515573d6000803e3d6000fd5b50505050816001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562001b2657600080fd5b604051637fec2a8d60e01b81526001600160a01b0383166004820152829060008051602062022b7e83398151915290637fec2a8d90602401600060405180830381600087803b158015620025a857600080fd5b505af1158015620025bd573d6000803e3d6000fd5b50505050816001600160a01b03166354d26bba6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562001b2657600080fd5b604051637fec2a8d60e01b81526001600160a01b0384166004820152839060008051602062022b7e83398151915290637fec2a8d90602401600060405180830381600087803b1580156200265057600080fd5b505af115801562002665573d6000803e3d6000fd5b50506040516310a5a7f760e01b81526001600160401b03851660048201526001600160a01b03861692506310a5a7f7915060240162000452565b604051637fec2a8d60e01b81526001600160a01b0383166004820152829060008051602062022b7e83398151915290637fec2a8d90602401600060405180830381600087803b158015620026f257600080fd5b505af115801562002707573d6000803e3d6000fd5b50505050816001600160a01b03166323dbce506040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562001b2657600080fd5b6000829050806001600160a01b03166325d70f786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200278b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620027b1919062003d48565b821480620028225750806001600160a01b03166309839a936040518163ffffffff1660e01b8152600401602060405180830381865afa158015620027f9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200281f919062003d48565b82145b80620028915750806001600160a01b031663a10ac97a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002868573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200288e919062003d48565b82145b620028d05760405162461bcd60e51b815260206004820152600e60248201526d34b73b30b634b21030b1ba34b7b760911b604482015260640162000d0b565b604051637fec2a8d60e01b81526001600160a01b038516600482015260008051602062022b7e83398151915290637fec2a8d90602401600060405180830381600087803b1580156200292157600080fd5b505af115801562002936573d6000803e3d6000fd5b50506040516376ab298d60e11b8152600481018590526001600160a01b038416925063ed56531a915060240162000452565b604051637fec2a8d60e01b81526001600160a01b0383166004820152829060008051602062022b7e83398151915290637fec2a8d90602401600060405180830381600087803b158015620029bb57600080fd5b505af1158015620029d0573d6000803e3d6000fd5b50505050816001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562001b2657600080fd5b60008390506000816001600160a01b031663241b71bb836001600160a01b031663a10ac97a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002a65573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002a8b919062003d48565b6040518263ffffffff1660e01b815260040162002aaa91815260200190565b602060405180830381865afa15801562002ac8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002aee919062003d62565b90506000826001600160a01b031663241b71bb846001600160a01b03166309839a936040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002b40573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002b66919062003d48565b6040518263ffffffff1660e01b815260040162002b8591815260200190565b602060405180830381865afa15801562002ba3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002bc9919062003d62565b90506000836001600160a01b031663241b71bb856001600160a01b03166325d70f786040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002c1b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002c41919062003d48565b6040518263ffffffff1660e01b815260040162002c6091815260200190565b602060405180830381865afa15801562002c7e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002ca4919062003d62565b90506000846001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002ce7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002d0d919062003d8d565b90506000856001600160a01b031663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002d50573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002d76919062003d8d565b90506000866001600160a01b03166339acf9f16040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002db9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002ddf919062003d8d565b604051637fec2a8d60e01b81526001600160a01b038d16600482015290915060008051602062022b7e83398151915290637fec2a8d90602401600060405180830381600087803b15801562002e3357600080fd5b505af115801562002e48573d6000803e3d6000fd5b5050505060008260405162002e5d9062003aa4565b6001600160a01b039091168152602001604051809103906000f08015801562002e8a573d6000803e3d6000fd5b50905060008051602062022b9e83398151915260001c6001600160a01b03166376eadd366040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562002edb57600080fd5b505af115801562002ef0573d6000803e3d6000fd5b5050505062002f038d8c838d8d620035c6565b836001600160a01b0316886001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002f4c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002f72919062003d8d565b6001600160a01b03161462002f9b5760405162461bcd60e51b815260040162000d0b9062003dcd565b826001600160a01b0316886001600160a01b031663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562002fe4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200300a919062003d8d565b6001600160a01b031614620030525760405162461bcd60e51b815260206004820152600d60248201526c1d1bdad95b8818da185b99d959609a1b604482015260640162000d0b565b816001600160a01b0316886001600160a01b03166339acf9f16040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200309b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620030c1919062003d8d565b6001600160a01b031614620031085760405162461bcd60e51b815260206004820152600c60248201526b1bdb5b9a4818da185b99d95960a21b604482015260640162000d0b565b861515886001600160a01b031663241b71bb8a6001600160a01b031663a10ac97a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562003159573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200317f919062003d48565b6040518263ffffffff1660e01b81526004016200319e91815260200190565b602060405180830381865afa158015620031bc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620031e2919062003d62565b1515146200322e5760405162461bcd60e51b8152602060048201526018602482015277185b1b081c185d5cd959081cdd185d194818da185b99d95960421b604482015260640162000d0b565b851515886001600160a01b031663241b71bb8a6001600160a01b03166309839a936040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200327f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620032a5919062003d48565b6040518263ffffffff1660e01b8152600401620032c491815260200190565b602060405180830381865afa158015620032e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003308919062003d62565b151514620033595760405162461bcd60e51b815260206004820152601b60248201527f62726964676520706175736564207374617465206368616e6765640000000000604482015260640162000d0b565b841515886001600160a01b031663241b71bb8a6001600160a01b03166325d70f786040518163ffffffff1660e01b8152600401602060405180830381865afa158015620033aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620033d0919062003d48565b6040518263ffffffff1660e01b8152600401620033ef91815260200190565b602060405180830381865afa1580156200340d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003433919062003d62565b151514620034845760405162461bcd60e51b815260206004820152601d60248201527f776974686472617720706175736564207374617465206368616e676564000000604482015260640162000d0b565b604051620034929062003ab2565b604051809103906000f080158015620034af573d6000803e3d6000fd5b5060405163148aedc160e21b81526001600160a01b038d81166004830152919091169063522bb70490602401600060405180830381600087803b158015620034f657600080fd5b505af11580156200350b573d6000803e3d6000fd5b5050505050505050505050505050505050565b604051637fec2a8d60e01b81526001600160a01b0383166004820152829060008051602062022b7e83398151915290637fec2a8d90602401600060405180830381600087803b1580156200357157600080fd5b505af115801562003586573d6000803e3d6000fd5b50505050816001600160a01b031663c3d8ad676040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562001b2657600080fd5b62001a77858585858560015b6000620035df86620037d9565b604051637fec2a8d60e01b81526001600160a01b038916600482015290915060008051602062022b7e83398151915290637fec2a8d90602401600060405180830381600087803b1580156200363357600080fd5b505af115801562003648573d6000803e3d6000fd5b5050604051639623609d60e01b81526001600160a01b0384169250639623609d91506200368090899089908990899060040162003df4565b600060405180830381600087803b1580156200369b57600080fd5b505af1158015620036b0573d6000803e3d6000fd5b5050505060008051602062022b9e83398151915260001c6001600160a01b03166376eadd366040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200370257600080fd5b505af115801562003717573d6000803e3d6000fd5b5050505081156200377b576200372d8562003883565b6200377b5760405162461bcd60e51b815260206004820152601960248201527f696e697469616c697a657273206e6f742064697361626c656400000000000000604482015260640162000d0b565b846001600160a01b03166200379087620038a8565b6001600160a01b03161462001ba25760405162461bcd60e51b815260206004820152600e60248201526d1d5c19dc9859194819985a5b195960921b604482015260640162000d0b565b604051630667f9d760e41b81526001600160a01b03821660048201527fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103602482015260009060008051602062022b7e8339815191529063667f9d70906044015b602060405180830381865afa15801562003857573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200387d919062003d48565b92915050565b60006001600160401b0362003898836200390d565b6001600160401b03161492915050565b604051630667f9d760e41b81526001600160a01b03821660048201527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc602482015260009060008051602062022b7e8339815191529063667f9d709060440162003839565b604051630667f9d760e41b81526001600160a01b03821660048201527ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a006024820152600090819060008051602062022b7e8339815191529063667f9d7090604401602060405180830381865afa1580156200398c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620039b2919062003d48565b90506001600160401b038111156200387d5760405162461bcd60e51b815260206004820152600c60248201526b696e697469616c697a696e6760a01b604482015260640162000d0b565b611f0c8062003e4183390190565b6117e88062005d4d83390190565b613f90806200753583390190565b611a30806200b4c583390190565b61017e806200cef583390190565b611ff6806200d07383390190565b61275c806200f06983390190565b614ea980620117c583390190565b611982806201666e83390190565b61195d8062017ff083390190565b6112dd806201994d83390190565b61112a806201ac2a83390190565b611659806201bd5483390190565b6157d1806201d3ad83390190565b6001600160a01b038116811462003ad657600080fd5b50565b6001600160401b038116811462003ad657600080fd5b60008060006060848603121562003b0557600080fd5b833562003b128162003ac0565b9250602084013562003b248162003ac0565b9150604084013562003b368162003ad9565b809150509250925092565b60008083601f84011262003b5457600080fd5b5081356001600160401b0381111562003b6c57600080fd5b60208301915083602082850101111562003b8557600080fd5b9250929050565b60008060008060006080868803121562003ba557600080fd5b853562003bb28162003ac0565b9450602086013562003bc48162003ac0565b9350604086013562003bd68162003ac0565b925060608601356001600160401b0381111562003bf257600080fd5b62003c008882890162003b41565b969995985093965092949392505050565b6000806000806060858703121562003c2857600080fd5b843562003c358162003ac0565b9350602085013562003c478162003ac0565b925060408501356001600160401b0381111562003c6357600080fd5b62003c718782880162003b41565b95989497509550505050565b60008060006060848603121562003c9357600080fd5b833562003ca08162003ac0565b9250602084013562003cb28162003ac0565b9150604084013562003b368162003ac0565b6000806040838503121562003cd857600080fd5b823562003ce58162003ac0565b9150602083013562003cf78162003ac0565b809150509250929050565b60008060006060848603121562003d1857600080fd5b833562003d258162003ac0565b9250602084013562003d378162003ac0565b929592945050506040919091013590565b60006020828403121562003d5b57600080fd5b5051919050565b60006020828403121562003d7557600080fd5b8151801515811462003d8657600080fd5b9392505050565b60006020828403121562003da057600080fd5b815162003d868162003ac0565b60006020828403121562003dc057600080fd5b815162003d868162003ad9565b6020808252600d908201526c1bdddb995c8818da185b99d959609a1b604082015260600190565b6001600160a01b0385811682528416602082015260606040820181905281018290526000828460808401376000608084840101526080601f19601f85011683010190509594505050505056fe608060405234801561001057600080fd5b5061001961001e565b6100d0565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161561006e5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100cd5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b611e2d806100df6000396000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c80639a5551c31161011a578063bfc71416116100ad578063db847a591161007c578063db847a59146106ea578063e21497b9146106fd578063e5737f6214610730578063f2fde38b14610743578063f364f6871461075657600080fd5b8063bfc71416146105cc578063d0ebdbe714610677578063d32b68ad1461068a578063db0018e8146106b757600080fd5b8063b17db68a116100e9578063b17db68a14610546578063b984cc0b14610566578063b9923e1c146105a6578063bc51bf37146105b957600080fd5b80639a5551c3146104c25780639c742ced146104f5578063a12f2c5814610508578063b0e21e8a1461051b57600080fd5b80635d3acee2116101925780638b7bfd70116101615780638b7bfd701461042d5780638da5cb5b146104755780638dd9523c146104a55780638f9d6ace146104b857600080fd5b80635d3acee2146103ca578063653c356e146103dd5780636b6dccfe14610412578063715018a61461042557600080fd5b8063481c6a75116101ce578063481c6a751461033457806350b815391461036657806354fd4d50146103b057806356bce459146103b757600080fd5b80632105b75514610200578063223aacf8146102155780632d4634a414610228578063415070af146102e9575b600080fd5b61021361020e36600461185c565b610769565b005b610213610223366004611914565b6107a9565b6102d36102363660046119f8565b6040805160a081018252600080825260208201819052918101829052606081018290526080810191909152506001600160401b03908116600090815260026020908152604091829020825160a081018452905461ffff8116825263ffffffff6201000082041692820192909252600160301b8204841692810192909252600160701b810483166060830152600160b01b9004909116608082015290565b6040516102e09190611a1a565b60405180910390f35b61031c6102f73660046119f8565b6001600160401b03908116600090815260036020526040902054600160701b90041690565b6040516001600160401b0390911681526020016102e0565b60005461034e90600160601b90046001600160a01b031681565b6040516001600160a01b0390911681526020016102e0565b61039b6103743660046119f8565b6001600160401b031660009081526002602052604090205462010000900463ffffffff1690565b60405163ffffffff90911681526020016102e0565b600261031c565b6102136103c5366004611a74565b6108ef565b6102136103d8366004611a74565b61092b565b61039b6103eb3660046119f8565b6001600160401b031660009081526003602052604090205462010000900463ffffffff1690565b610213610420366004611aa7565b610967565b61021361097b565b61046761043b3660046119f8565b6001600160401b031660009081526002602090815260408083205461ffff168352600190915290205490565b6040519081526020016102e0565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031661034e565b6104676104b3366004611ac2565b61098f565b610467620f424081565b61031c6104d03660046119f8565b6001600160401b03908116600090815260026020526040902054600160b01b90041690565b610213610503366004611b69565b610b1c565b610213610516366004611ba5565b610b58565b60005461052e906001600160601b031681565b6040516001600160601b0390911681526020016102e0565b610467610554366004611bcf565b60016020526000908152604090205481565b6105936105743660046119f8565b6001600160401b031660009081526002602052604090205461ffff1690565b60405161ffff90911681526020016102e0565b6102136105b4366004611a74565b610b94565b6102136105c7366004611a74565b610bd0565b6102d36105da3660046119f8565b6040805160a081018252600080825260208201819052918101829052606081018290526080810191909152506001600160401b03908116600090815260036020908152604091829020825160a081018452905461ffff8116825263ffffffff6201000082041692820192909252600160301b8204841692810192909252600160701b810483166060830152600160b01b9004909116608082015290565b610213610685366004611bea565b610c0c565b6105936106983660046119f8565b6001600160401b031660009081526003602052604090205461ffff1690565b61031c6106c53660046119f8565b6001600160401b03908116600090815260036020526040902054600160b01b90041690565b6102136106f836600461185c565b610c44565b61031c61070b3660046119f8565b6001600160401b03908116600090815260026020526040902054600160701b90041690565b61021361073e366004611b69565b610c80565b610213610751366004611bea565b610cbc565b610213610764366004611c05565b610cfc565b600054600160601b90046001600160a01b0316331461079b5760405163607e454560e11b815260040160405180910390fd5b6107a58282610d38565b5050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03166000811580156107ee5750825b90506000826001600160401b0316600114801561080a5750303b155b905081158015610818575080155b156108365760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561086057845460ff60401b1916600160401b1785555b6108698e610f27565b6108728d610f38565b61087b8c610f95565b6108858b8b610fe8565b61088f8989610d38565b61089987876111d2565b83156108df57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050505050505050565b600054600160601b90046001600160a01b031633146109215760405163607e454560e11b815260040160405180910390fd5b6107a58282611224565b600054600160601b90046001600160a01b0316331461095d5760405163607e454560e11b815260040160405180910390fd5b6107a582826112ee565b61096f6113b0565b61097881610f95565b50565b6109836113b0565b61098d600061140b565b565b6001600160401b0380851660009081526002602090815260408083208054600160b01b8104861685526003845282852061ffff82168652600190945291842054939490938592620f4240926109ec9291600160701b900416611c50565b6109f69190611c67565b825461ffff811660009081526001602052604081205492935091620f424091610a2f9190600160701b90046001600160401b0316611c50565b610a399190611c67565b905081600003610a5c57604051633532119760e11b815260040160405180910390fd5b80600003610a7d57604051633532119760e11b815260040160405180910390fd5b8254600090600160b01b81046001600160401b031690610aaa908a9062010000900463ffffffff16611c89565b610ab49190611c50565b9050610ac08282611c50565b85548490610adb908a9062010000900463ffffffff16611c9c565b6001600160401b0316610aee9190611c50565b600054610b0491906001600160601b0316611c89565b610b0e9190611c89565b9a9950505050505050505050565b600054600160601b90046001600160a01b03163314610b4e5760405163607e454560e11b815260040160405180910390fd5b6107a5828261147c565b600054600160601b90046001600160a01b03163314610b8a5760405163607e454560e11b815260040160405180910390fd5b6107a58282611513565b600054600160601b90046001600160a01b03163314610bc65760405163607e454560e11b815260040160405180910390fd5b6107a582826115a5565b600054600160601b90046001600160a01b03163314610c025760405163607e454560e11b815260040160405180910390fd5b6107a58282611667565b610c146113b0565b6001600160a01b038116610c3b5760405163d92e233d60e01b815260040160405180910390fd5b61097881610f38565b600054600160601b90046001600160a01b03163314610c765760405163607e454560e11b815260040160405180910390fd5b6107a58282610fe8565b600054600160601b90046001600160a01b03163314610cb25760405163607e454560e11b815260040160405180910390fd5b6107a58282611729565b610cc46113b0565b6001600160a01b038116610cf357604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6109788161140b565b600054600160601b90046001600160a01b03163314610d2e5760405163607e454560e11b815260040160405180910390fd5b6107a582826111d2565b60005b81811015610f22576000838383818110610d5757610d57611cc3565b905060a00201803603810190610d6d9190611d77565b805190915061ffff16600003610d96576040516350614df960e01b815260040160405180910390fd5b80604001516001600160401b0316600003610dc457604051630c26851b60e11b815260040160405180910390fd5b80606001516001600160401b0316600003610df257604051630e661aed60e41b815260040160405180910390fd5b80608001516001600160401b0316600003610e20576040516348cfc33560e11b815260040160405180910390fd5b604081810180516001600160401b0390811660009081526003602090815290849020855181548388015195516060808a01516080808c015161ffff90961665ffffffffffff1990951685176201000063ffffffff909b169a8b02176601000000000000600160b01b031916600160301b948a1694850267ffffffffffffffff60701b191617600160701b928a169283021767ffffffffffffffff60b01b1916600160b01b969099169586029890981790955588519283529482019690965295860194909452908401528201527fd143a0934cc5e5337dca3eb0afa1e7f86680796ca6f132bfe7e0828b7155bd409060a00160405180910390a150600101610d3b565b505050565b610f2f6117c0565b61097881611809565b600080546001600160601b0316600160601b6001600160a01b038416908102919091179091556040519081527f60a0f5b9f9e81e98216071b85826681c796256fe3d1354ecb675580fba64fa69906020015b60405180910390a150565b600080546bffffffffffffffffffffffff19166001600160601b0383169081179091556040519081527fd91752439e358587fc0828ed743df5939f16a918de501834bd954d03be15c95990602001610f8a565b60005b81811015610f2257600083838381811061100757611007611cc3565b905060a0020180360381019061101d9190611d77565b805190915061ffff16600003611046576040516350614df960e01b815260040160405180910390fd5b80604001516001600160401b031660000361107457604051633212217560e21b815260040160405180910390fd5b80606001516001600160401b03166000036110a257604051630e661aed60e41b815260040160405180910390fd5b80608001516001600160401b03166000036110d057604051630c26851b60e11b815260040160405180910390fd5b604081810180516001600160401b0390811660009081526002602090815290849020855181548388015195516060808a01516080808c015161ffff90961665ffffffffffff1990951685176201000063ffffffff909b169a8b02176601000000000000600160b01b031916600160301b948a1694850267ffffffffffffffff60701b191617600160701b928a169283021767ffffffffffffffff60b01b1916600160b01b969099169586029890981790955588519283529482019690965295860194909452908401528201527f600e7ff14e74285e17debda1fee2df93741c6518e12ba908ba4417c0610974a99060a00160405180910390a150600101610feb565b60005b81811015610f225760008383838181106111f1576111f1611cc3565b9050604002018036038101906112079190611d93565b905061121b81600001518260200151611513565b506001016111d5565b816001600160401b031660000361124e57604051630c26851b60e11b815260040160405180910390fd5b806001600160401b0316600003611278576040516348cfc33560e11b815260040160405180910390fd5b6001600160401b03828116600081815260036020908152604091829020805467ffffffffffffffff60b01b1916600160b01b95871695860217905581519283528201929092527f9e8c8606adb2b50f48cb69ccb1c3e349e6046ed63765e5931c01f4fe6aacd5e991015b60405180910390a15050565b806001600160401b031660000361131857604051630e661aed60e41b815260040160405180910390fd5b816001600160401b031660000361134257604051630c26851b60e11b815260040160405180910390fd5b6001600160401b03828116600081815260036020908152604091829020805467ffffffffffffffff60701b1916600160701b95871695860217905581519283528201929092527fd7d8dd5a956a8bd500e02d52d0a9dd8a0e2955ec48771a8c9da485e6706c66fb91016112e2565b336113e27f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b03161461098d5760405163118cdaa760e01b8152336004820152602401610cea565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b816001600160401b03166000036114a657604051630c26851b60e11b815260040160405180910390fd5b6001600160401b038216600081815260036020908152604091829020805465ffffffff000019166201000063ffffffff8716908102919091179091558251938452908301527f406ba3ab8c23e58f883620734592e662ac0018177590c1f9f27afc58a4b7b58391016112e2565b806000036115345760405163fa90419960e01b815260040160405180910390fd5b8161ffff16600003611559576040516350614df960e01b815260040160405180910390fd5b61ffff8216600081815260016020908152604091829020849055815192835282018390527f770404c81b5a366795e9a06ff3969e3fb2eb0515b7282e986f261c180b97623d91016112e2565b806001600160401b03166000036115cf57604051630e661aed60e41b815260040160405180910390fd5b816001600160401b03166000036115f957604051633212217560e21b815260040160405180910390fd5b6001600160401b03828116600081815260026020908152604091829020805467ffffffffffffffff60701b1916600160701b95871695860217905581519283528201929092527fe0e5abb8929e27a69d77f47a4e3f9575411a5be1fa596e5b55078d7850f358db91016112e2565b816001600160401b031660000361169157604051633212217560e21b815260040160405180910390fd5b806001600160401b03166000036116bb57604051630c26851b60e11b815260040160405180910390fd5b6001600160401b03828116600081815260026020908152604091829020805467ffffffffffffffff60b01b1916600160b01b95871695860217905581519283528201929092527f0a5853014cbdb5103840fd3b7fcd886e7a93ef446d8c8707a5269d25ed32b4fe91016112e2565b816001600160401b031660000361175357604051633212217560e21b815260040160405180910390fd5b6001600160401b038216600081815260026020908152604091829020805465ffffffff000019166201000063ffffffff8716908102919091179091558251938452908301527f525a2cd9c1093178959cb9c72fe00c6be026fc953e93c9bc789d2176da98c40591016112e2565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661098d57604051631afcd79f60e31b815260040160405180910390fd5b610cc46117c0565b60008083601f84011261182357600080fd5b5081356001600160401b0381111561183a57600080fd5b60208301915083602060a08302850101111561185557600080fd5b9250929050565b6000806020838503121561186f57600080fd5b82356001600160401b0381111561188557600080fd5b61189185828601611811565b90969095509350505050565b80356001600160a01b03811681146118b457600080fd5b919050565b80356001600160601b03811681146118b457600080fd5b60008083601f8401126118e257600080fd5b5081356001600160401b038111156118f957600080fd5b6020830191508360208260061b850101111561185557600080fd5b600080600080600080600080600060c08a8c03121561193257600080fd5b61193b8a61189d565b985061194960208b0161189d565b975061195760408b016118b9565b965060608a01356001600160401b038082111561197357600080fd5b61197f8d838e01611811565b909850965060808c013591508082111561199857600080fd5b6119a48d838e01611811565b909650945060a08c01359150808211156119bd57600080fd5b506119ca8c828d016118d0565b915080935050809150509295985092959850929598565b80356001600160401b03811681146118b457600080fd5b600060208284031215611a0a57600080fd5b611a13826119e1565b9392505050565b60a08101611a6e828461ffff815116825263ffffffff602082015116602083015260408101516001600160401b03808216604085015280606084015116606085015280608084015116608085015250505050565b92915050565b60008060408385031215611a8757600080fd5b611a90836119e1565b9150611a9e602084016119e1565b90509250929050565b600060208284031215611ab957600080fd5b611a13826118b9565b60008060008060608587031215611ad857600080fd5b611ae1856119e1565b935060208501356001600160401b0380821115611afd57600080fd5b818701915087601f830112611b1157600080fd5b813581811115611b2057600080fd5b886020828501011115611b3257600080fd5b602083019550809450505050611b4a604086016119e1565b905092959194509250565b803563ffffffff811681146118b457600080fd5b60008060408385031215611b7c57600080fd5b611b85836119e1565b9150611a9e60208401611b55565b803561ffff811681146118b457600080fd5b60008060408385031215611bb857600080fd5b611bc183611b93565b946020939093013593505050565b600060208284031215611be157600080fd5b611a1382611b93565b600060208284031215611bfc57600080fd5b611a138261189d565b60008060208385031215611c1857600080fd5b82356001600160401b03811115611c2e57600080fd5b611891858286016118d0565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417611a6e57611a6e611c3a565b600082611c8457634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115611a6e57611a6e611c3a565b6001600160401b03818116838216019080821115611cbc57611cbc611c3a565b5092915050565b634e487b7160e01b600052603260045260246000fd5b600060a08284031215611ceb57600080fd5b60405160a081018181106001600160401b0382111715611d1b57634e487b7160e01b600052604160045260246000fd5b604052905080611d2a83611b93565b8152611d3860208401611b55565b6020820152611d49604084016119e1565b6040820152611d5a606084016119e1565b6060820152611d6b608084016119e1565b60808201525092915050565b600060a08284031215611d8957600080fd5b611a138383611cd9565b600060408284031215611da557600080fd5b604051604081018181106001600160401b0382111715611dd557634e487b7160e01b600052604160045260246000fd5b604052611de183611b93565b815260208301356020820152809150509291505056fea2646970667358221220b5b4525f7807b54ac9f4b5ba2a123a4c45a47c4391c1f9b589427c3ed79fee3c64736f6c63430008180033608060405234801561001057600080fd5b5061001961001e565b6100d0565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161561006e5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100cd5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b611709806100df6000396000f3fe6080604052600436106101405760003560e01c8063499e85cd116100b6578063a10ac97a1161006f578063a10ac97a146103df578063c3de453d14610401578063c4d66de814610414578063d9caed1214610434578063ed56531a14610454578063f2fde38b1461047457600080fd5b8063499e85cd14610321578063715018a6146103415780638456cb59146103565780638da5cb5b1461036b5780638fdcb4c9146103a8578063969b53da146103bf57600080fd5b80632f4dae9f116101085780632f4dae9f1461024a57806332c8bb771461026a57806339acf9f1146102805780633abfe55f146102bf5780633f4ba83a146102df578063402914f5146102f457600080fd5b806309839a931461014557806312622e5b1461018c5780631e83409a146101c4578063241b71bb146101e657806325d70f7814610216575b600080fd5b34801561015157600080fd5b506101797f0683d1c283a672fc58eb7940a0dba83ea98b96966a9ca1b030dec2c60cea4d1e81565b6040519081526020015b60405180910390f35b34801561019857600080fd5b506000546101ac906001600160401b031681565b6040516001600160401b039091168152602001610183565b3480156101d057600080fd5b506101e46101df3660046113f2565b610494565b005b3480156101f257600080fd5b5061020661020136600461140f565b6107d9565b6040519015158152602001610183565b34801561022257600080fd5b506101797f855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c7781565b34801561025657600080fd5b506101e461026536600461140f565b6107ea565b34801561027657600080fd5b5061017960015481565b34801561028c57600080fd5b506000546102a790600160401b90046001600160a01b031681565b6040516001600160a01b039091168152602001610183565b3480156102cb57600080fd5b506101796102da366004611428565b6107fe565b3480156102eb57600080fd5b506101e46108d1565b34801561030057600080fd5b5061017961030f3660046113f2565b60036020526000908152604090205481565b34801561032d57600080fd5b506101e461033c366004611469565b6108e3565b34801561034d57600080fd5b506101e4610989565b34801561036257600080fd5b506101e461099b565b34801561037757600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166102a7565b3480156103b457600080fd5b506101ac6201388081565b3480156103cb57600080fd5b506002546102a7906001600160a01b031681565b3480156103eb57600080fd5b506101796000805160206116b483398151915281565b6101e461040f366004611428565b6109ab565b34801561042057600080fd5b506101e461042f3660046113f2565b610a01565b34801561044057600080fd5b506101e461044f3660046114ba565b610b0f565b34801561046057600080fd5b506101e461046f36600461140f565b610dbd565b34801561048057600080fd5b506101e461048f3660046113f2565b610dce565b7f855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c776104be81610e09565b156104e45760405162461bcd60e51b81526004016104db906114fb565b60405180910390fd5b60008060089054906101000a90046001600160a01b03166001600160a01b0316632f32700e6040518163ffffffff1660e01b81526004016040805180830381865afa158015610537573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055b9190611527565b600054909150600160401b90046001600160a01b031633146105b75760405162461bcd60e51b815260206004820152601560248201527413db5b9a509c9a5919d94e881b9bdd081e18d85b1b605a1b60448201526064016104db565b60005481516001600160401b0390811691161461060b5760405162461bcd60e51b81526020600482015260126024820152714f6d6e694272696467653a206e6f74204c3160701b60448201526064016104db565b6001600160a01b0383166106615760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e694272696467653a206e6f20636c61696d20746f207a65726f0000000060448201526064016104db565b6020808201516001600160a01b038116600090815260039092526040909120546106cd5760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e694272696467653a206e6f7468696e6720746f20636c61696d0000000060448201526064016104db565b6001600160a01b038181166000908152600360205260408082208054908390559051909287169083908381818185875af1925050503d806000811461072e576040519150601f19603f3d011682016040523d82523d6000602084013e610733565b606091505b50509050806107845760405162461bcd60e51b815260206004820152601b60248201527f4f6d6e694272696467653a207472616e73666572206661696c6564000000000060448201526064016104db565b856001600160a01b0316836001600160a01b03167ff7a40077ff7a04c7e61f6f26fb13774259ddf1b6bce9ecf26a8276cdd3992683846040516107c991815260200190565b60405180910390a3505050505050565b60006107e482610e09565b92915050565b6107f2610e82565b6107fb81610edd565b50565b600080546040516001600160a01b03858116602483015260448201859052600160401b83041691638dd9523c916001600160401b039091169060640160408051601f198184030181529181526020820180516001600160e01b031663f3fef3a360e01b179052516001600160e01b031960e085901b16815261088992919062013880906004016115d9565b602060405180830381865afa1580156108a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ca919061160f565b9392505050565b6108d9610e82565b6108e1610f95565b565b6108eb610e82565b600080546001600160a01b03858116600160401b81026001600160e01b03199093166001600160401b03891690811793909317909355600280549186166001600160a01b0319909216821790556001849055604080519283526020830193909352818301526060810183905290517fc12d4a2db17193df88185c2dc087fa9536c12710f1381b359b80553e5d9a12939181900360800190a150505050565b610991610e82565b6108e16000610fac565b6109a3610e82565b6108e161101d565b7f0683d1c283a672fc58eb7940a0dba83ea98b96966a9ca1b030dec2c60cea4d1e6109d581610e09565b156109f25760405162461bcd60e51b81526004016104db906114fb565b6109fc8383611034565b505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b0316600081158015610a465750825b90506000826001600160401b03166001148015610a625750303b155b905081158015610a70575080155b15610a8e5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610ab857845460ff60401b1916600160401b1785555b610ac1866112c3565b8315610b0757845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b7f855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c77610b3981610e09565b15610b565760405162461bcd60e51b81526004016104db906114fb565b60008060089054906101000a90046001600160a01b03166001600160a01b0316632f32700e6040518163ffffffff1660e01b81526004016040805180830381865afa158015610ba9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bcd9190611527565b600054909150600160401b90046001600160a01b03163314610c295760405162461bcd60e51b815260206004820152601560248201527413db5b9a509c9a5919d94e881b9bdd081e18d85b1b605a1b60448201526064016104db565b60025460208201516001600160a01b03908116911614610c845760405162461bcd60e51b81526020600482015260166024820152754f6d6e694272696467653a206e6f742062726964676560501b60448201526064016104db565b60005481516001600160401b03908116911614610cd85760405162461bcd60e51b81526020600482015260126024820152714f6d6e694272696467653a206e6f74204c3160701b60448201526064016104db565b8260016000828254610cea919061163e565b90915550506040516000906001600160a01b0386169085908381818185875af1925050503d8060008114610d3a576040519150601f19603f3d011682016040523d82523d6000602084013e610d3f565b606091505b5050905080610d76576001600160a01b03861660009081526003602052604081208054869290610d7090849061163e565b90915550505b6040805185815282151560208201526001600160a01b0380881692908916917f2b664ab52fe561d3ace376046aea39744dd736ec1f67d89d504ffd2192825f6191016107c9565b610dc5610e82565b6107fb816112d4565b610dd6610e82565b6001600160a01b038116610e0057604051631e4fbdf760e01b8152600060048201526024016104db565b6107fb81610fac565b6000805160206116b483398151915260009081527fff37105740f03695c8f3597f3aff2b92fbe1c80abea3c28731ecff2efd69340060208190527ffae9838a178d7f201aa98e2ce5340158edda60bb1e8f168f46503bf3e99f13be5460ff16806108ca5750600092835260205250604090205460ff1690565b33610eb47f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146108e15760405163118cdaa760e01b81523360048201526024016104db565b60008181527fff37105740f03695c8f3597f3aff2b92fbe1c80abea3c28731ecff2efd693400602081905260409091205460ff16610f545760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016104db565b600082815260208290526040808220805460ff191690555183917fd05bfc2250abb0f8fd265a54c53a24359c5484af63cad2e4ce87c78ab751395a91a25050565b6108e16000805160206116b4833981519152610edd565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6108e16000805160206116b48339815191526112d4565b6001600160a01b03821661108a5760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e694272696467653a206e6f2062726964676520746f207a65726f00000060448201526064016104db565b600081116110da5760405162461bcd60e51b815260206004820152601e60248201527f4f6d6e694272696467653a20616d6f756e74206d757374206265203e2030000060448201526064016104db565b60015481111561112c5760405162461bcd60e51b815260206004820152601860248201527f4f6d6e694272696467653a206e6f206c6971756964697479000000000000000060448201526064016104db565b61113682826107fe565b611140908261163e565b34101561118f5760405162461bcd60e51b815260206004820152601e60248201527f4f6d6e694272696467653a20696e73756666696369656e742066756e6473000060448201526064016104db565b80600160008282546111a19190611651565b9091555050600054600160401b90046001600160a01b031663c21dda4f6111c88334611651565b6000546002546040516001600160a01b038881166024830152604482018890526001600160401b0390931692600492169060640160408051601f198184030181529181526020820180516001600160e01b031663f3fef3a360e01b179052516001600160e01b031960e088901b16815261124d94939291906201388090600401611664565b6000604051808303818588803b15801561126657600080fd5b505af115801561127a573d6000803e3d6000fd5b50506040518481526001600160a01b03861693503392507f59bc8a913d49a9626dd6ba5def7fcf12804061c1bb9b8b6db077e1a12cb4b422915060200160405180910390a35050565b6112cb61138c565b6107fb816113d5565b60008181527fff37105740f03695c8f3597f3aff2b92fbe1c80abea3c28731ecff2efd693400602081905260409091205460ff16156113485760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016104db565b600082815260208290526040808220805460ff191660011790555183917f0cb09dc71d57eeec2046f6854976717e4874a3cf2d6ddeddde337e5b6de6ba3191a25050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166108e157604051631afcd79f60e31b815260040160405180910390fd5b610dd661138c565b6001600160a01b03811681146107fb57600080fd5b60006020828403121561140457600080fd5b81356108ca816113dd565b60006020828403121561142157600080fd5b5035919050565b6000806040838503121561143b57600080fd5b8235611446816113dd565b946020939093013593505050565b6001600160401b03811681146107fb57600080fd5b6000806000806080858703121561147f57600080fd5b843561148a81611454565b9350602085013561149a816113dd565b925060408501356114aa816113dd565b9396929550929360600135925050565b6000806000606084860312156114cf57600080fd5b83356114da816113dd565b925060208401356114ea816113dd565b929592945050506040919091013590565b60208082526012908201527113db5b9a509c9a5919d94e881c185d5cd95960721b604082015260600190565b60006040828403121561153957600080fd5b604051604081018181106001600160401b038211171561156957634e487b7160e01b600052604160045260246000fd5b604052825161157781611454565b81526020830151611587816113dd565b60208201529392505050565b6000815180845260005b818110156115b95760208185018101518683018201520161159d565b506000602082860101526020601f19601f83011685010191505092915050565b60006001600160401b038086168352606060208401526115fc6060840186611593565b9150808416604084015250949350505050565b60006020828403121561162157600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b808201808211156107e4576107e4611628565b818103818111156107e4576107e4611628565b60006001600160401b03808816835260ff8716602084015260018060a01b038616604084015260a0606084015261169e60a0840186611593565b9150808416608084015250969550505050505056fe76e8952e4b09b8d505aa08998d716721a1dbf0884ac74202e33985da1ed005e9a26469706673582212209775afebd0f12adba98113d3dac850a8b467795f44809d0686e89184da65311664736f6c634300081800336080604052600c8054600160ff199182168117909255601f8054909116909117905534801561002d57600080fd5b50613f538061003d6000396000f3fe60806040523480156200001157600080fd5b5060043610620000e05760003560e01c8063916a17c61162000097578063ba414fa6116200006e578063ba414fa61462000193578063c040622614620001ae578063e20c9f7114620001ba578063fa7626d414620001c457600080fd5b8063916a17c61462000166578063b0464fdc146200017f578063b5508aa9146200018957600080fd5b80631ed7831c14620000e55780632ade388014620001075780633e5e3c2314620001205780633f7286f4146200012a57806366d9a9a0146200013457806385226c81146200014d575b600080fd5b620000ef620001d2565b604051620000fe9190620024cc565b60405180910390f35b6200011162000236565b604051620000fe91906200256f565b620000ef62000384565b620000ef620003e6565b6200013e62000448565b604051620000fe91906200267d565b62000157620005c1565b604051620000fe91906200270a565b620001706200069b565b604051620000fe919062002772565b6200017062000785565b620001576200086f565b6200019d62000949565b6040519015158152602001620000fe565b620001b8620009ec565b005b620000ef62000b0b565b601f546200019d9060ff1681565b606060168054806020026020016040519081016040528092919081815260200182805480156200022c57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116200020d575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b828210156200037b57600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b8282101562000363578382906000526020600020018054620002cf90620027e7565b80601f0160208091040260200160405190810160405280929190818152602001828054620002fd90620027e7565b80156200034e5780601f1062000322576101008083540402835291602001916200034e565b820191906000526020600020905b8154815290600101906020018083116200033057829003601f168201915b505050505081526020019060010190620002ad565b5050505081525050815260200190600101906200025a565b50505050905090565b606060188054806020026020016040519081016040528092919081815260200182805480156200022c576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116200020d575050505050905090565b606060178054806020026020016040519081016040528092919081815260200182805480156200022c576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116200020d575050505050905090565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156200037b5783829060005260206000209060020201604051806040016040529081600082018054620004a290620027e7565b80601f0160208091040260200160405190810160405280929190818152602001828054620004d090620027e7565b8015620005215780601f10620004f55761010080835404028352916020019162000521565b820191906000526020600020905b8154815290600101906020018083116200050357829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015620005a857602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b03191681526020019060040190602082600301049283019260010382029150808411620005695790505b505050505081525050815260200190600101906200046c565b6060601a805480602002602001604051908101604052809291908181526020016000905b828210156200037b5783829060005260206000200180546200060790620027e7565b80601f01602080910402602001604051908101604052809291908181526020018280546200063590620027e7565b8015620006865780601f106200065a5761010080835404028352916020019162000686565b820191906000526020600020905b8154815290600101906020018083116200066857829003601f168201915b505050505081526020019060010190620005e5565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156200037b5760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156200076c57602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116200072d5790505b50505050508152505081526020019060010190620006bf565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156200037b5760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156200085657602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b03191681526020019060040190602082600301049283019260010382029150808411620008175790505b50505050508152505081526020019060010190620007a9565b60606019805480602002602001604051908101604052809291908181526020016000905b828210156200037b578382906000526020600020018054620008b590620027e7565b80601f0160208091040260200160405190810160405280929190818152602001828054620008e390620027e7565b8015620009345780601f10620009085761010080835404028352916020019162000934565b820191906000526020600020905b8154815290600101906020018083116200091657829003601f168201915b50505050508152602001906001019062000893565b60085460009060ff161562000962575060085460ff1690565b604051630667f9d760e41b815260008051602062003efe833981519152600482018190526519985a5b195960d21b602483015260009163667f9d7090604401602060405180830381865afa158015620009bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620009e5919062002823565b1415905090565b60007f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b0316634ad0bac96040518163ffffffff1660e01b81526004016060604051808303816000875af115801562000a52573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a7891906200285a565b509091506000905081600481111562000a955762000a95620028a9565b1462000ad65760405162461bcd60e51b815260206004820152600c60248201526b1b9bc8189c9bd85918d85cdd60a21b604482015260640160405180910390fd5b62000ae062000b6d565b62000aea62001343565b62000af46200169c565b62000afe62001a58565b62000b0862001e50565b50565b606060158054806020026020016040519081016040528092919081815260200182805480156200022c576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116200020d575050505050905090565b601f805474121e24000000000000000000000000000000000200610100600160a81b0319909116179081905560408051634b4da9ed60e11b815290516101009092046001600160a01b03169163969b53da916004808201926020929091908290030181865afa15801562000be5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c0b9190620028bf565b602180546001600160a01b0319166001600160a01b03928316179055601f54604080516312622e5b60e01b81529051610100909204909216916312622e5b9160048083019260209291908290030181865afa15801562000c6f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c959190620028e4565b602260146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550601f60019054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000d11573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000d379190620028bf565b602280546001600160a01b0319166001600160a01b039290921691909117905560405162000d6590620024b1565b604051809103906000f08015801562000d82573d6000803e3d6000fd5b50602080546001600160a01b0319166001600160a01b03928316178155601f54604080516332c8bb7760e01b81529051600094610100909304909216926332c8bb77926004808401938290030181865afa15801562000de5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e0b919062002823565b90504660a60362000e57576022805467ffffffffffffffff60a01b1916600160a01b179055602180546001600160a01b03191673bbb3f5bcb1c8b0ee932efaba2fdee566b83053a51790555b6022546040516303223eab60e11b81526001600160a01b03909116600482015260008051602062003efe833981519152906306447d5690602401600060405180830381600087803b15801562000eac57600080fd5b505af115801562000ec1573d6000803e3d6000fd5b5050601f5460225460205460215460405163499e85cd60e01b8152600160a01b90930467ffffffffffffffff1660048401526001600160a01b0391821660248401528116604483015260648201869052610100909204909116925063499e85cd9150608401600060405180830381600087803b15801562000f4157600080fd5b505af115801562000f56573d6000803e3d6000fd5b5050601f54604080516309839a9360e01b815290516101009092046001600160a01b0316935063241b71bb925083916309839a93916004808201926020929091908290030181865afa15801562000fb1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000fd7919062002823565b6040518263ffffffff1660e01b815260040162000ff691815260200190565b602060405180830381865afa15801562001014573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200103a919062002910565b156200111157601f54604080516309839a9360e01b815290516101009092046001600160a01b031691632f4dae9f9183916309839a93916004808201926020929091908290030181865afa15801562001097573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010bd919062002823565b6040518263ffffffff1660e01b8152600401620010dc91815260200190565b600060405180830381600087803b158015620010f757600080fd5b505af11580156200110c573d6000803e3d6000fd5b505050505b601f54604080516304bae1ef60e31b815290516101009092046001600160a01b03169163241b71bb9183916325d70f78916004808201926020929091908290030181865afa15801562001168573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200118e919062002823565b6040518263ffffffff1660e01b8152600401620011ad91815260200190565b602060405180830381865afa158015620011cb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011f1919062002910565b15620012c857601f54604080516304bae1ef60e31b815290516101009092046001600160a01b031691632f4dae9f9183916325d70f78916004808201926020929091908290030181865afa1580156200124e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001274919062002823565b6040518263ffffffff1660e01b81526004016200129391815260200190565b600060405180830381600087803b158015620012ae57600080fd5b505af1158015620012c3573d6000803e3d6000fd5b505050505b7f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200132757600080fd5b505af11580156200133c573d6000803e3d6000fd5b5050505050565b60006200136a60405180604001604052806002815260200161746f60f01b8152506200228a565b90506000670de0b6b3a764000090506000620013a3604051806040016040528060058152602001643830bcb7b960d91b8152506200228a565b90506000601f60019054906101000a90046001600160a01b03166001600160a01b03166332c8bb776040518163ffffffff1660e01b8152600401602060405180830381865afa158015620013fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001421919062002823565b60405163f30c7ba360e01b815290915060008051602062003efe8339815191529063f30c7ba3906200145a908790879060040162002934565b600060405180830381600087803b1580156200147557600080fd5b505af11580156200148a573d6000803e3d6000fd5b5050602054602254602154601f546040516001600160a01b0389811660248301528b81166044830152606482018b905294851696506328d27d639550600160a01b90930467ffffffffffffffff1693918216926101009091049091169060840160408051601f198184030181529181526020820180516001600160e01b0316636ce5768960e11b179052516001600160e01b031960e087901b1681526200153d9493929190620186a0906004016200295c565b6020604051808303816000875af11580156200155d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001583919062002823565b5062001614601f60019054906101000a90046001600160a01b03166001600160a01b03166332c8bb776040518163ffffffff1660e01b8152600401602060405180830381865afa158015620015dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001602919062002823565b6200160e8584620029b1565b6200229e565b601f5460405163402914f560e01b81526001600160a01b03848116600483015262001696926101009004169063402914f5906024015b602060405180830381865afa15801562001668573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200168e919062002823565b60006200229e565b50505050565b6000620016c360405180604001604052806002815260200161746f60f01b8152506200228a565b601f54604051633abfe55f60e01b81526001600160a01b038084166004830152670de0b6b3a76400006024830181905293945060009261010090041690633abfe55f90604401602060405180830381865afa15801562001727573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200174d919062002823565b6020546022546021546040516001600160a01b0388811660248301526044820188905294955060008051602062003efe8339815191529463f30c7ba3948116938793600160a01b90910467ffffffffffffffff16926004929091169060640160408051808303601f190181529181526020808301805163f3fef3a360e01b6001600160e01b03909116179052601f548251638fdcb4c960e01b815292516101009091046001600160a01b031692638fdcb4c99260048083019391928290030181865afa15801562001822573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620018489190620028e4565b6040516024016200185e959493929190620029d9565b60408051601f198184030181529181526020820180516001600160e01b031663c21dda4f60e01b179052516001600160e01b031960e086901b168152620018ab9392919060040162002a16565b600060405180830381600087803b158015620018c657600080fd5b505af1158015620018db573d6000803e3d6000fd5b5060008051602062003efe833981519152925063c88a5e6d9150859050620019048486620029b1565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156200194b57600080fd5b505af115801562001960573d6000803e3d6000fd5b505060405163ca669fa760e01b81526001600160a01b038616600482015260008051602062003efe833981519152925063ca669fa79150602401600060405180830381600087803b158015620019b557600080fd5b505af1158015620019ca573d6000803e3d6000fd5b5050601f5461010090046001600160a01b0316915063c3de453d9050620019f28385620029b1565b6040516001600160e01b031960e084901b1681526001600160a01b0387166004820152602481018690526044016000604051808303818588803b15801562001a3957600080fd5b505af115801562001a4e573d6000803e3d6000fd5b5050505050505050565b600062001a7f60405180604001604052806002815260200161746f60f01b8152506200228a565b90506000670de0b6b3a76400009050600062001ab8604051806040016040528060058152602001643830bcb7b960d91b8152506200228a565b9050600060405162001aca90620024bf565b604051809103906000f08015801562001ae7573d6000803e3d6000fd5b5060405163f30c7ba360e01b815290915060008051602062003efe8339815191529063f30c7ba39062001b21908490879060040162002934565b600060405180830381600087803b15801562001b3c57600080fd5b505af115801562001b51573d6000803e3d6000fd5b5050602054602254602154601f546040516001600160a01b0389811660248301528881166044830152606482018b905294851696506328d27d639550600160a01b90930467ffffffffffffffff1693918216926101009091049091169060840160408051601f198184030181529181526020820180516001600160e01b0316636ce5768960e11b179052516001600160e01b031960e087901b16815262001c049493929190620186a0906004016200295c565b6020604051808303816000875af115801562001c24573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c4a919062002823565b50601f5460405163402914f560e01b81526001600160a01b03848116600483015262001ccb926101009004169063402914f590602401602060405180830381865afa15801562001c9e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001cc4919062002823565b846200229e565b60405163f30c7ba360e01b815260008051602062003efe8339815191529063f30c7ba39062001d01908790879060040162002934565b600060405180830381600087803b15801562001d1c57600080fd5b505af115801562001d31573d6000803e3d6000fd5b5050602054602254601f546040516001600160a01b038a8116602483015293841695506328d27d639450600160a01b90920467ffffffffffffffff16928792610100909204169060440160408051601f198184030181529181526020820180516001600160e01b0316630f41a04d60e11b179052516001600160e01b031960e087901b16815262001dce9493929190620186a0906004016200295c565b6020604051808303816000875af115801562001dee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001e14919062002823565b50601f5460405163402914f560e01b81526001600160a01b03848116600483015262001696926101009004169063402914f5906024016200164a565b60225460405163ca669fa760e01b81526001600160a01b03909116600482015260008051602062003efe8339815191529063ca669fa790602401600060405180830381600087803b15801562001ea557600080fd5b505af115801562001eba573d6000803e3d6000fd5b50505050601f60019054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562001f0f57600080fd5b505af115801562001f24573d6000803e3d6000fd5b5050601f54604080516309839a9360e01b815290516200201294506101009092046001600160a01b0316925063241b71bb9183916309839a939160048083019260209291908290030181865afa15801562001f83573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001fa9919062002823565b6040518263ffffffff1660e01b815260040162001fc891815260200190565b602060405180830381865afa15801562001fe6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200200c919062002910565b62002309565b601f54604080516304bae1ef60e31b815290516200206c9261010090046001600160a01b03169163241b71bb9183916325d70f789160048083019260209291908290030181865afa15801562001f83573d6000803e3d6000fd5b60225460405163ca669fa760e01b81526001600160a01b03909116600482015260008051602062003efe8339815191529063ca669fa790602401600060405180830381600087803b158015620020c157600080fd5b505af1158015620020d6573d6000803e3d6000fd5b50505050601f60019054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200212b57600080fd5b505af115801562002140573d6000803e3d6000fd5b5050601f54604080516309839a9360e01b815290516200222e94506101009092046001600160a01b0316925063241b71bb9183916309839a939160048083019260209291908290030181865afa1580156200219f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620021c5919062002823565b6040518263ffffffff1660e01b8152600401620021e491815260200190565b602060405180830381865afa15801562002202573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002228919062002910565b62002367565b601f54604080516304bae1ef60e31b81529051620022889261010090046001600160a01b03169163241b71bb9183916325d70f789160048083019260209291908290030181865afa1580156200219f573d6000803e3d6000fd5b565b600062002297826200239c565b5092915050565b60405163260a5b1560e21b8152600481018390526024810182905260008051602062003efe833981519152906398296c549060440160006040518083038186803b158015620022ec57600080fd5b505afa15801562002301573d6000803e3d6000fd5b505050505050565b604051630c9fd58160e01b8152811515600482015260008051602062003efe83398151915290630c9fd581906024015b60006040518083038186803b1580156200235257600080fd5b505afa1580156200133c573d6000803e3d6000fd5b60405163a598288560e01b8152811515600482015260008051602062003efe8339815191529063a59828859060240162002339565b60008082604051602001620023b2919062002a48565b60408051808303601f190181529082905280516020909101206001625e79b760e01b0319825260048201819052915060008051602062003efe8339815191529063ffa1864990602401602060405180830381865afa15801562002419573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200243f9190620028bf565b6040516318caf8e360e31b815290925060008051602062003efe8339815191529063c657c7189062002478908590879060040162002a66565b600060405180830381600087803b1580156200249357600080fd5b505af1158015620024a8573d6000803e3d6000fd5b50505050915091565b61140d8062002a9583390190565b605c8062003ea283390190565b6020808252825182820181905260009190848201906040850190845b818110156200250f5783516001600160a01b031683529284019291840191600101620024e8565b50909695505050505050565b60005b83811015620025385781810151838201526020016200251e565b50506000910152565b600081518084526200255b8160208601602086016200251b565b601f01601f19169290920160200192915050565b602080825282518282018190526000919060409081850190600581811b8701840188860187805b858110156200262557603f198b8503018752825180516001600160a01b031685528901518985018990528051898601819052908a0190606081881b870181019190870190855b818110156200260e57605f19898503018352620025fb84865162002541565b948e01949350918d0191600101620025dc565b505050978a01979450509188019160010162002596565b50919a9950505050505050505050565b60008151808452602080850194506020840160005b83811015620026725781516001600160e01b031916875295820195908201906001016200264a565b509495945050505050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b83811015620026fc57888303603f1901855281518051878552620026cd8886018262002541565b91890151858303868b0152919050620026e7818362002635565b968901969450505090860190600101620026a6565b509098975050505050505050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b828110156200276557603f198886030184526200275285835162002541565b9450928501929085019060010162002733565b5092979650505050505050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b83811015620026fc57888303603f19018552815180516001600160a01b03168452870151878401879052620027d38785018262002635565b95880195935050908601906001016200279b565b600181811c90821680620027fc57607f821691505b6020821081036200281d57634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156200283657600080fd5b5051919050565b80516001600160a01b03811681146200285557600080fd5b919050565b6000806000606084860312156200287057600080fd5b8351600581106200288057600080fd5b925062002890602085016200283d565b9150620028a0604085016200283d565b90509250925092565b634e487b7160e01b600052602160045260246000fd5b600060208284031215620028d257600080fd5b620028dd826200283d565b9392505050565b600060208284031215620028f757600080fd5b815167ffffffffffffffff81168114620028dd57600080fd5b6000602082840312156200292357600080fd5b81518015158114620028dd57600080fd5b6001600160a01b03929092168252602082015260606040820181905260009082015260800190565b67ffffffffffffffff86811682526001600160a01b0386811660208401528516604083015260a060608301819052600091906200299c9084018662002541565b91508084166080840152509695505050505050565b80820180821115620029d357634e487b7160e01b600052601160045260246000fd5b92915050565b600067ffffffffffffffff808816835260ff8716602084015260018060a01b038616604084015260a060608401526200299c60a084018662002541565b60018060a01b038416815282602082015260606040820152600062002a3f606083018462002541565b95945050505050565b6000825162002a5c8184602087016200251b565b9190910192915050565b6001600160a01b038316815260406020820181905260009062002a8c9083018462002541565b94935050505056fe60c0604052600080546001600160a01b0319167301004e20000000000000520800000000004c4b4017905534801561003657600080fd5b506001600160401b03461660805260a660a052604051633b9aca009061005b906100a3565b908152602001604051809103906000f08015801561007d573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b03929092169190911790556100b0565b6101d08061123d83390190565b60805160a0516111616100dc60003960006101a30152600081816104450152610a5601526111616000f3fe60806040526004361061014b5760003560e01c80636739afca116100b6578063b2b2f5bd1161006f578063b2b2f5bd146104cb578063b4d5afd1146104ff578063c21dda4f14610534578063c26dfc0514610547578063cf84c81814610569578063d051c97d1461058957600080fd5b80636739afca146103ca57806378fe5307146103ec5780638dd9523c146104135780639a8a059214610433578063a32eb7c614610467578063aaf1bc971461049b57600080fd5b80632f32700e116101085780632f32700e1461026b5780633aa87330146102d05780633fd3b15e14610311578063500b19e71461035257806355e2448e1461038a57806366a1eaf3146103aa57600080fd5b80630360d20f1461015057806306c3dc5f1461017c578063110ff5f11461019157806324278bbe146101dd57806328d27d631461021d5780632cc3d3541461024b575b600080fd5b34801561015c57600080fd5b50610165600281565b60405160ff90911681526020015b60405180910390f35b34801561018857600080fd5b50610165600381565b34801561019d57600080fd5b506101c57f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160401b039091168152602001610173565b3480156101e957600080fd5b5061020d6101f8366004610ccb565b60066020526000908152604090205460ff1681565b6040519015158152602001610173565b34801561022957600080fd5b5061023d610238366004610d4c565b6105ca565b604051908152602001610173565b34801561025757600080fd5b5061023d610266366004610dd0565b6107e2565b34801561027757600080fd5b506040805180820182526000808252602091820152815180830183526007546001600160401b0381168083526001600160a01b03600160401b909204821692840192835284519081529151169181019190915201610173565b3480156102dc57600080fd5b506101c56102eb366004610e45565b60026020908152600092835260408084209091529082529020546001600160401b031681565b34801561031d57600080fd5b506101c561032c366004610e45565b60046020908152600092835260408084209091529082529020546001600160401b031681565b34801561035e57600080fd5b50600154610372906001600160a01b031681565b6040516001600160a01b039091168152602001610173565b34801561039657600080fd5b506007546001600160401b0316151561020d565b3480156103b657600080fd5b506103c86103c5366004610e78565b50565b005b3480156103d657600080fd5b506103df6108c8565b6040516101739190610eb3565b3480156103f857600080fd5b506000546101c590600160401b90046001600160401b031681565b34801561041f57600080fd5b5061023d61042e366004610f64565b61090e565b34801561043f57600080fd5b506101c57f000000000000000000000000000000000000000000000000000000000000000081565b34801561047357600080fd5b5061023d7ffeccba1cfc4544bf9cd83b76f36ae5c464750b6c43f682e26744ee21ec31fc1e81565b3480156104a757600080fd5b5061020d6104b6366004610ccb565b60056020526000908152604090205460ff1681565b3480156104d757600080fd5b5061023d7fa06a0c1264badca141841b5f52470407dac9adaaa539dd445540986341b73a6881565b34801561050b57600080fd5b5060005461052190600160801b900461ffff1681565b60405161ffff9091168152602001610173565b6103c8610542366004610fc8565b61098f565b34801561055357600080fd5b5060005461052190600160901b900461ffff1681565b34801561057557600080fd5b506000546101c5906001600160401b031681565b34801561059557600080fd5b506101c56105a4366004610e45565b60036020908152600092835260408084209091529082529020546001600160401b031681565b600080546001600160401b03908116908316111561062f5760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e69506f7274616c3a206761734c696d697420746f6f206869676800000060448201526064015b60405180910390fd5b6000546001600160401b03600160401b909104811690831610156106955760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a206761734c696d697420746f6f206c6f77000000006044820152606401610626565b604080518082019091526001600160401b0388168082526001600160a01b0388166020909201829052600780546001600160e01b031916909117600160401b9092029190911790555a9050600080866001600160a01b0316846001600160401b03168787604051610707929190611000565b60006040518083038160008787f1925050503d8060008114610745576040519150601f19603f3d011682016040523d82523d6000602084013e61074a565b606091505b50915091505a61075a9084611026565b600780546001600160e01b03191690559250811580156107835750836001600160401b03168310155b156107c95760405162461bcd60e51b81526020600482015260166024820152754d6f636b506f7274616c3a206f7574206f662067617360501b6044820152606401610626565b816107d657805160208201fd5b50509695505050505050565b604080518082019091526001600160401b0386168082526001600160a01b0386166020909201829052600780546001600160e01b031916909117600160401b90920291909117905560005a9050600080856001600160a01b0316858560405161084c929190611000565b6000604051808303816000865af19150503d8060008114610889576040519150601f19603f3d011682016040523d82523d6000602084013e61088e565b606091505b50915091505a61089e9084611026565b600780546001600160e01b03191690559250816108bd57805160208201fd5b505095945050505050565b60408051600080825260208201909252606091610908565b6040805180820190915260008152606060208201528152602001906001900390816108e05790505b50905090565b600154604051632376548f60e21b81526000916001600160a01b031690638dd9523c90610945908890889088908890600401611068565b602060405180830381865afa158015610962573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061098691906110a0565b95945050505050565b6000546001600160401b0390811690821611156109ee5760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e69506f7274616c3a206761734c696d697420746f6f20686967680000006044820152606401610626565b6000546001600160401b03600160401b90910481169082161015610a545760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a206761734c696d697420746f6f206c6f77000000006044820152606401610626565b7f00000000000000000000000000000000000000000000000000000000000000006001600160401b0316866001600160401b031603610ad55760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a20756e737570706f727465642064657374000000006044820152606401610626565b6001600160401b038616610b2b5760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a20756e737570706f727465642064657374000000006044820152606401610626565b6001600160a01b038416610b815760405162461bcd60e51b815260206004820152601b60248201527f4f6d6e69506f7274616c3a206e6f20706f7274616c207863616c6c00000000006044820152606401610626565b6000610b8f8785858561090e565b905080341015610be15760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a20696e73756666696369656e7420666565000000006044820152606401610626565b6001600160401b03808816600090815260026020908152604080832060ff8b1680855292528220805491936001939192610c1d918591166110b9565b82546101009290920a6001600160401b0381810219909316918316021790915589811660008181526002602090815260408083208786168085529252918290205491519190931693507fb7c8eb9d7a7fbcdab809ab7b8a7c41701eb3115e3fe99d30ff490d8552f72bfa90610c9d9033908c908c908c908c908c906110e0565b60405180910390a45050505050505050565b80356001600160401b0381168114610cc657600080fd5b919050565b600060208284031215610cdd57600080fd5b610ce682610caf565b9392505050565b80356001600160a01b0381168114610cc657600080fd5b60008083601f840112610d1657600080fd5b5081356001600160401b03811115610d2d57600080fd5b602083019150836020828501011115610d4557600080fd5b9250929050565b60008060008060008060a08789031215610d6557600080fd5b610d6e87610caf565b9550610d7c60208801610ced565b9450610d8a60408801610ced565b935060608701356001600160401b03811115610da557600080fd5b610db189828a01610d04565b9094509250610dc4905060808801610caf565b90509295509295509295565b600080600080600060808688031215610de857600080fd5b610df186610caf565b9450610dff60208701610ced565b9350610e0d60408701610ced565b925060608601356001600160401b03811115610e2857600080fd5b610e3488828901610d04565b969995985093965092949392505050565b60008060408385031215610e5857600080fd5b610e6183610caf565b9150610e6f60208401610caf565b90509250929050565b600060208284031215610e8a57600080fd5b81356001600160401b03811115610ea057600080fd5b82016101808185031215610ce657600080fd5b600060208083018184528085518083526040925060408601915060408160051b8701018488016000805b84811015610f5557898403603f19018652825180516001600160401b039081168652908901518986018990528051898701819052908a0191849160608801905b80841015610f3f57845183168252938c019360019390930192908c0190610f1d565b50988b0198965050509288019250600101610edd565b50919998505050505050505050565b60008060008060608587031215610f7a57600080fd5b610f8385610caf565b935060208501356001600160401b03811115610f9e57600080fd5b610faa87828801610d04565b9094509250610fbd905060408601610caf565b905092959194509250565b60008060008060008060a08789031215610fe157600080fd5b610fea87610caf565b9550602087013560ff81168114610d7c57600080fd5b8183823760009101908152919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561103957611039611010565b92915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60006001600160401b0380871683526060602084015261108c60608401868861103f565b915080841660408401525095945050505050565b6000602082840312156110b257600080fd5b5051919050565b6001600160401b038181168382160190808211156110d9576110d9611010565b5092915050565b6001600160a01b0387811682528616602082015260a06040820181905260009061110d908301868861103f565b6001600160401b03949094166060830152506080015294935050505056fea2646970667358221220fd7b887f78d4d6f8b128aeff3bca8f522590cf1ade5c373d54b1d4a974105a0564736f6c63430008180033608060405234801561001057600080fd5b506040516101d03803806101d083398101604081905261002f91610037565b600055610050565b60006020828403121561004957600080fd5b5051919050565b6101718061005f6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806354fd4d50146100465780638dd9523c1461005a578063ddca3f4314610081575b600080fd5b604051600181526020015b60405180910390f35b6100736100683660046100a7565b600054949350505050565b604051908152602001610051565b61007360005481565b803567ffffffffffffffff811681146100a257600080fd5b919050565b600080600080606085870312156100bd57600080fd5b6100c68561008a565b9350602085013567ffffffffffffffff808211156100e357600080fd5b818701915087601f8301126100f757600080fd5b81358181111561010657600080fd5b88602082850101111561011857600080fd5b6020830195508094505050506101306040860161008a565b90509295919450925056fea2646970667358221220590210d19b70b700525ca08edfb5f66d40cc1e65dbe3999c4a70b839b2075d9464736f6c634300081800336080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea26469706673582212206327234a5ca7dda5d1a8236e82fd71259e5912bfaf443ba25aded274bc0b65eb64736f6c634300081800330000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12da264697066735822122074ec4cc99009d238e45a3232457c3b47e903f31b64b8bb178b8bfbd9086536c064736f6c634300081800336080604052600c8054600160ff199182168117909255601f8054909116909117905534801561002d57600080fd5b506119f38061003d6000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c806385226c811161008c578063b5508aa911610066578063b5508aa914610173578063ba414fa61461017b578063e20c9f7114610193578063fa7626d41461019b57600080fd5b806385226c8114610141578063916a17c614610156578063b0464fdc1461016b57600080fd5b80631ed7831c146100d45780632ade3880146100f25780633e5e3c23146101075780633f7286f41461010f578063522bb7041461011757806366d9a9a01461012c575b600080fd5b6100dc6101a8565b6040516100e991906114a9565b60405180910390f35b6100fa61020a565b6040516100e9919061153c565b6100dc61034c565b6100dc6103ac565b61012a610125366004611614565b61040c565b005b61013461051c565b6040516100e99190611677565b610149610689565b6040516100e991906116fe565b61015e610759565b6040516100e99190611762565b61015e61083f565b610149610925565b6101836109f5565b60405190151581526020016100e9565b6100dc610a99565b601f546101839060ff1681565b6060601680548060200260200160405190810160405280929190818152602001828054801561020057602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116101e2575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561034357600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b8282101561032c57838290600052602060002001805461029f906117d3565b80601f01602080910402602001604051908101604052809291908181526020018280546102cb906117d3565b80156103185780601f106102ed57610100808354040283529160200191610318565b820191906000526020600020905b8154815290600101906020018083116102fb57829003601f168201915b505050505081526020019060010190610280565b50505050815250508152602001906001019061022e565b50505050905090565b60606018805480602002602001604051908101604052809291908181526020018280548015610200576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116101e2575050505050905090565b60606017805480602002602001604051908101604052809291908181526020018280548015610200576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116101e2575050505050905090565b60007f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c6001600160a01b0316634ad0bac96040518163ffffffff1660e01b81526004016060604051808303816000875af1158015610471573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610495919061180d565b50909150600090508160048111156104af576104af61185e565b146104f05760405162461bcd60e51b815260206004820152600c60248201526b1b9bc8189c9bd85918d85cdd60a21b60448201526064015b60405180910390fd5b60006104fb83610af9565b905061050681610c15565b61050f81610e1a565b610517611028565b505050565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156103435783829060005260206000209060020201604051806040016040529081600082018054610573906117d3565b80601f016020809104026020016040519081016040528092919081815260200182805461059f906117d3565b80156105ec5780601f106105c1576101008083540402835291602001916105ec565b820191906000526020600020905b8154815290600101906020018083116105cf57829003601f168201915b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561067157602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116106335790505b50505050508152505081526020019060010190610540565b6060601a805480602002602001604051908101604052809291908181526020016000905b828210156103435783829060005260206000200180546106cc906117d3565b80601f01602080910402602001604051908101604052809291908181526020018280546106f8906117d3565b80156107455780601f1061071a57610100808354040283529160200191610745565b820191906000526020600020905b81548152906001019060200180831161072857829003601f168201915b5050505050815260200190600101906106ad565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156103435760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561082757602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116107e95790505b5050505050815250508152602001906001019061077d565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156103435760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561090d57602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116108cf5790505b50505050508152505081526020019060010190610863565b60606019805480602002602001604051908101604052809291908181526020016000905b82821015610343578382906000526020600020018054610968906117d3565b80601f0160208091040260200160405190810160405280929190818152602001828054610994906117d3565b80156109e15780601f106109b6576101008083540402835291602001916109e1565b820191906000526020600020905b8154815290600101906020018083116109c457829003601f168201915b505050505081526020019060010190610949565b60085460009060ff1615610a0d575060085460ff1690565b604051630667f9d760e41b8152737109709ecfa91a80626ff3989d68f67f5b1dd12d600482018190526519985a5b195960d21b602483015260009163667f9d7090604401602060405180830381865afa158015610a6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a929190611874565b1415905090565b60606015805480602002602001604051908101604052809291908181526020018280548015610200576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116101e2575050505050905090565b601f8054610100600160a81b0319166101006001600160a01b038416021790556000610b27602060a461119a565b50610b35602061426861119a565b50610b44602062014a3461119a565b50610b53602062066eee61119a565b50610b62602062aa37dc61119a565b50610b6f6021600161119a565b50610b7c6021600a61119a565b50610b89602160a661119a565b50610b97602161210561119a565b50610ba5602161a4b161119a565b50610bb16020466111ad565b15610bbe57506001919050565b610bc96021466111ad565b15610bd657506002919050565b60405162461bcd60e51b815260206004820152600f60248201526e696e76616c6964206e6574776f726b60881b60448201526064016104e7565b919050565b60006001826002811115610c2b57610c2b61185e565b14610c3f57610c3a60216111b9565b610c49565b610c4960206111b9565b905060005b8151811015610517576000828281518110610c6b57610c6b61188d565b6020908102919091010151601f54604051630b518d2960e21b815267ffffffffffffffff831660048201529192506000916101009091046001600160a01b031690632d4634a49060240160a060405180830381865afa158015610cd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf69190611979565b9050610d39816000015161ffff1660006040518060400160405280601581526020017419d85cc81d1bdad95b881b5d5cdd081899481cd95d605a1b8152506111d0565b610d7f816040015167ffffffffffffffff1660006040518060400160405280601481526020017318da185a5b881a59081b5d5cdd081899481cd95d60621b8152506111d0565b610dc6816060015167ffffffffffffffff1660006040518060400160405280601581526020017419d85cc81c1c9a58d9481b5d5cdd081899481cd95d605a1b8152506111d0565b610e10816080015167ffffffffffffffff1660006040518060400160405280601881526020017719185d184818dbdcdd081a59081b5d5cdd081899481cd95d60421b8152506111d0565b5050600101610c4e565b60006001826002811115610e3057610e3061185e565b14610e4457610e3f60216111b9565b610e4e565b610e4e60206111b9565b905060005b8151811015610517576000828281518110610e7057610e7061188d565b6020908102919091010151601f54604051635fe38a0b60e11b815267ffffffffffffffff831660048201529192506000916101009091046001600160a01b03169063bfc714169060240160a060405180830381865afa158015610ed7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610efb9190611979565b9050610f3e816000015161ffff1660006040518060400160405280601581526020017419d85cc81d1bdad95b881b5d5cdd081899481cd95d605a1b8152506111d0565b610f88816040015167ffffffffffffffff1660006040518060400160405280601881526020017719185d184818dbdcdd081a59081b5d5cdd081899481cd95d60421b8152506111d0565b610fcf816060015167ffffffffffffffff1660006040518060400160405280601581526020017419d85cc81c1c9a58d9481b5d5cdd081899481cd95d605a1b8152506111d0565b61101e816080015167ffffffffffffffff1660006040518060400160405280601881526020017f676173207065722062797465206d7573742062652073657400000000000000008152506111d0565b5050600101610e53565b601f546040516358bedb4560e11b81526001600482015260009161010090046001600160a01b03169063b17db68a90602401602060405180830381865afa158015611077573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061109b9190611874565b601f546040516358bedb4560e11b8152600260048201529192506000916101009091046001600160a01b03169063b17db68a90602401602060405180830381865afa1580156110ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111129190611874565b90506111558260006040518060400160405280601c81526020017f6f6d6e69206e61746976652072617465206d75737420626520736574000000008152506111d0565b6111968160006040518060400160405280601b81526020017f657468206e61746976652072617465206d7573742062652073657400000000008152506111d0565b5050565b60006111a68383611240565b9392505050565b60006111a68383611361565b60606111ca6111c7836113ee565b90565b92915050565b604051636cd1e26960e11b8152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063d9a3c4d29061120b90869086908690600401611995565b60006040518083038186803b15801561122357600080fd5b505afa158015611237573d6000803e3d6000fd5b50505050505050565b6318fb586460045260008281526024812068fbb67fda52d4bfb8bf830361126f5763f5a267f16000526004601cfd5b826112815768fbb67fda52d4bfb8bf92505b8019548160205280611326578154806112a1578483556001935050611359565b8481036112ae5750611359565b6001830154806112c957856001850155600194505050611359565b8581036112d7575050611359565b6002840154806112f35786600286015560019550505050611359565b86810361130257505050611359565b60009283526040808420600190559183528183206002905582529020600390555060075b836000526040600020805461135757600191821c8381018690558083019182905590821b8217831955909250611359565b505b505092915050565b6318fb586460045260008281526024812068fbb67fda52d4bfb8bf83036113905763f5a267f16000526004601cfd5b826113a25768fbb67fda52d4bfb8bf92505b8019546113d45780546001925083146113e757600181015483146113e757600281015483146113e757600091506113e7565b8060205282600052604060002054151591505b5092915050565b6318fb5864600452600081815260249020801954604051919068fbb67fda52d4bfb8bf90602084018161146857835480156114625780841415028152600184810154909250801561146257808414150260208201526002848101549092508015611462576003925083811415810260408301525b50611494565b8160011c915060005b8281101561149257848101548481141502600582901b830152600101611471565b505b8185528160051b810160405250505050919050565b6020808252825182820181905260009190848201906040850190845b818110156114ea5783516001600160a01b0316835292840192918401916001016114c5565b50909695505050505050565b6000815180845260005b8181101561151c57602081850181015186830182015201611500565b506000602082860101526020601f19601f83011685010191505092915050565b602080825282518282018190526000919060409081850190600581811b8701840188860187805b858110156115ec57603f198b8503018752825180516001600160a01b031685528901518985018990528051898601819052908a0190606081881b870181019190870190855b818110156115d657605f198985030183526115c48486516114f6565b948e01949350918d01916001016115a8565b505050978a019794505091880191600101611563565b50919a9950505050505050505050565b6001600160a01b038116811461161157600080fd5b50565b60006020828403121561162657600080fd5b81356111a6816115fc565b60008151808452602080850194506020840160005b8381101561166c5781516001600160e01b03191687529582019590820190600101611646565b509495945050505050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b838110156116f057888303603f19018552815180518785526116c4888601826114f6565b91890151858303868b01529190506116dc8183611631565b9689019694505050908601906001016116a0565b509098975050505050505050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101561175557603f198886030184526117438583516114f6565b94509285019290850190600101611727565b5092979650505050505050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b838110156116f057888303603f19018552815180516001600160a01b031684528701518784018790526117c087850182611631565b958801959350509086019060010161178b565b600181811c908216806117e757607f821691505b60208210810361180757634e487b7160e01b600052602260045260246000fd5b50919050565b60008060006060848603121561182257600080fd5b83516005811061183157600080fd5b6020850151909350611842816115fc565b6040850151909250611853816115fc565b809150509250925092565b634e487b7160e01b600052602160045260246000fd5b60006020828403121561188657600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b805163ffffffff81168114610c1057600080fd5b805167ffffffffffffffff81168114610c1057600080fd5b600060a082840312156118e157600080fd5b60405160a0810181811067ffffffffffffffff8211171561191257634e487b7160e01b600052604160045260246000fd5b8060405250809150825161ffff8116811461192c57600080fd5b815261193a602084016118a3565b602082015261194b604084016118b7565b604082015261195c606084016118b7565b606082015261196d608084016118b7565b60808201525092915050565b600060a0828403121561198b57600080fd5b6111a683836118cf565b8381528260208201526060604082015260006119b460608301846114f6565b9594505050505056fea2646970667358221220c45d76174219ce632bb65ff06d5237bbd2f6028cba08c5a26bd6ec24ed933faf64736f6c63430008180033608060405234801561001057600080fd5b5061015e806100206000396000f3fe6080604052600436106100295760003560e01c8063bef7a2f01461002e578063f679d3051461005c575b600080fd5b34801561003a57600080fd5b5061004a67016345785d8a000081565b60405190815260200160405180910390f35b610064610066565b005b61006e61009b565b60405133907fc3ef55ddda4bc9300706e15ab3aed03c762d8afd43a7d358a7b9503cb39f281b90600090a2565b67016345785d8a00003410156100f75760405162461bcd60e51b815260206004820152601a60248201527f536c617368696e673a20696e73756666696369656e7420666565000000000000604482015260640160405180910390fd5b60405161dead903480156108fc02916000818181858888f19350505050158015610125573d6000803e3d6000fd5b5056fea264697066735822122068796df7e832c0339bd6354c88a7f1784975f67034bb7fba147dd8be5cec6fc964736f6c63430008180033608060405234801561001057600080fd5b5061001961001e565b6100d0565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161561006e5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100cd5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b611f17806100df6000396000f3fe60806040526004361061011f5760003560e01c806384768b7a116100a0578063c6a2aac811610064578063c6a2aac814610324578063cf8e629a14610339578063d146fd1b1461034e578063eb4bd84414610368578063f2fde38b1461037b57600080fd5b806384768b7a1461024257806384b0196e146102825780638da5cb5b146102aa5780638f38fae8146102f1578063a5a470ad1461031157600080fd5b806359bcddde116100e757806359bcddde146101d65780635c19a95c146101f25780635cd8a76b14610205578063715018a61461021a57806378fcbe5b1461022f57600080fd5b8063117407e31461012457806311bcd83014610146578063296192f4146101765780633f0b1edf14610196578063400ada75146101b6575b600080fd5b34801561013057600080fd5b5061014461013f36600461190c565b61039b565b005b34801561015257600080fd5b5061016368056bc75e2d6310000081565b6040519081526020015b60405180910390f35b34801561018257600080fd5b50610163610191366004611981565b61046b565b3480156101a257600080fd5b506101446101b136600461190c565b6104d1565b3480156101c257600080fd5b506101446101d13660046119bf565b61059d565b3480156101e257600080fd5b50610163670de0b6b3a764000081565b6101446102003660046119fb565b6106ec565b34801561021157600080fd5b506101446107cd565b34801561022657600080fd5b506101446108d0565b61014461023d366004611a16565b6108e4565b34801561024e57600080fd5b5061027261025d3660046119fb565b60016020526000908152604090205460ff1681565b604051901515815260200161016d565b34801561028e57600080fd5b506102976109ce565b60405161016d9796959493929190611a8f565b3480156102b657600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546040516001600160a01b03909116815260200161016d565b3480156102fd57600080fd5b5061014461030c3660046119bf565b610a7a565b61014461031f366004611b71565b610b2a565b34801561033057600080fd5b50610144610c50565b34801561034557600080fd5b50610144610c8e565b34801561035a57600080fd5b506000546102729060ff1681565b610144610376366004611bb3565b610cc9565b34801561038757600080fd5b506101446103963660046119fb565b610e56565b6103a3610e94565b60005b818110156104665760018060008585858181106103c5576103c5611c06565b90506020020160208101906103da91906119fb565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905582828281811061041457610414611c06565b905060200201602081019061042991906119fb565b6001600160a01b03167fc6bdfc1f9b9f1f30ad26b86a7c623e58400512467a50e0c80439bfdaf3a2de9860405160405180910390a26001016103a6565b505050565b604080517fc9a51567e61a6d1a243a60e57bf4560e7e543694b79349ce2cba3a14fe21b0426020820152908101839052606081018290526000906104c8906080015b60405160208183030381529060405280519060200120610eef565b90505b92915050565b6104d9610e94565b60005b81811015610466576000600160008585858181106104fc576104fc611c06565b905060200201602081019061051191906119fb565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905582828281811061054b5761054b611c06565b905060200201602081019061056091906119fb565b6001600160a01b03167f3df1f5fcca9e1ece84ca685a63062905d8fe97ddb23246224be416f2d3c8613f60405160405180910390a26001016104dc565b600080516020611ec28339815191528054600160401b810460ff16159067ffffffffffffffff166000811580156105d15750825b905060008267ffffffffffffffff1660011480156105ee5750303b155b9050811580156105fc575080155b1561061a5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561064457845460ff60401b1916600160401b1785555b61064d87610f1c565b61068f604051806040016040528060078152602001665374616b696e6760c81b815250604051806040016040528060018152602001603160f81b815250610f2d565b6000805460ff191687151517905583156106e357845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b60005460ff16158061071657506001600160a01b03811660009081526001602052604090205460ff165b6107625760405162461bcd60e51b815260206004820152601860248201527714dd185ada5b99ce881b9bdd08185b1b1bddd959081d985b60421b60448201526064015b60405180910390fd5b670de0b6b3a764000034101561078a5760405162461bcd60e51b815260040161075990611c1c565b6040513481526001600160a01b0382169033907f510b11bb3f3c799b11307c01ab7db0d335683ef5b2da98f7697de744f465eacc9060200160405180910390a350565b600080516020611ec2833981519152805460029190600160401b900460ff16806108055750805467ffffffffffffffff808416911610155b156108235760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff191667ffffffffffffffff831617600160401b17815560408051808201825260078152665374616b696e6760c81b602080830191909152825180840190935260018352603160f81b9083015261088491610f2d565b805460ff60401b1916815560405167ffffffffffffffff831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050565b6108d8610e94565b6108e26000610f43565b565b60005460ff16158061090e57506001600160a01b03811660009081526001602052604090205460ff165b6109555760405162461bcd60e51b815260206004820152601860248201527714dd185ada5b99ce881b9bdd08185b1b1bddd959081d985b60421b6044820152606401610759565b670de0b6b3a764000034101561097d5760405162461bcd60e51b815260040161075990611c1c565b806001600160a01b0316826001600160a01b03167f510b11bb3f3c799b11307c01ab7db0d335683ef5b2da98f7697de744f465eacc346040516109c291815260200190565b60405180910390a35050565b60006060808280808381600080516020611ea283398151915280549091501580156109fb57506001810154155b610a3f5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606401610759565b610a47610fb4565b610a4f611077565b60408051600080825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b600080516020611ec28339815191528054600160401b810460ff16159067ffffffffffffffff16600081158015610aae5750825b905060008267ffffffffffffffff166001148015610acb5750303b155b905081158015610ad9575080155b15610af75760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610b2157845460ff60401b1916600160401b1785555b61068f87610f1c565b60005460ff161580610b4b57503360009081526001602052604090205460ff165b610b8e5760405162461bcd60e51b815260206004820152601460248201527314dd185ada5b99ce881b9bdd08185b1b1bddd95960621b6044820152606401610759565b68056bc75e2d63100000341015610bb75760405162461bcd60e51b815260040161075990611c1c565b610bc182826110b6565b610c075760405162461bcd60e51b81526020600482015260176024820152765374616b696e673a20696e76616c6964207075626b657960481b6044820152606401610759565b336001600160a01b03167fc7abef7b73f049da6a9bc2349ba5066a39e316eabc9f671b6f9406aa9490a453838334604051610c4493929190611c69565b60405180910390a25050565b610c58610e94565b6000805460ff191660011781556040517f8a943acd5f4e6d3df7565a4a08a93f6b04cc31bb6c01ca4aef7abd6baf455ec39190a1565b610c96610e94565b6000805460ff191681556040517f2d35c8d348a345fd7b3b03b7cfcf7ad0b60c2d46742d5ca536342e4185becb079190a1565b60005460ff161580610cea57503360009081526001602052604090205460ff165b610d2d5760405162461bcd60e51b815260206004820152601460248201527314dd185ada5b99ce881b9bdd08185b1b1bddd95960621b6044820152606401610759565b68056bc75e2d63100000341015610d565760405162461bcd60e51b815260040161075990611c1c565b610d60848461120a565b610da65760405162461bcd60e51b81526020600482015260176024820152765374616b696e673a20696e76616c6964207075626b657960481b6044820152606401610759565b610db284848484611220565b610dfe5760405162461bcd60e51b815260206004820152601a60248201527f5374616b696e673a20696e76616c6964207369676e61747572650000000000006044820152606401610759565b6000610e0a85856112d8565b9050336001600160a01b03167fc7abef7b73f049da6a9bc2349ba5066a39e316eabc9f671b6f9406aa9490a4538234604051610e47929190611ca2565b60405180910390a25050505050565b610e5e610e94565b6001600160a01b038116610e8857604051631e4fbdf760e01b815260006004820152602401610759565b610e9181610f43565b50565b33610ec67f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146108e25760405163118cdaa760e01b8152336004820152602401610759565b60006104cb610efc611325565b8360405161190160f01b8152600281019290925260228201526042902090565b610f24611334565b610e918161136b565b610f35611334565b610f3f8282611373565b5050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1028054606091600080516020611ea283398151915291610ff390611cc4565b80601f016020809104026020016040519081016040528092919081815260200182805461101f90611cc4565b801561106c5780601f106110415761010080835404028352916020019161106c565b820191906000526020600020905b81548152906001019060200180831161104f57829003601f168201915b505050505091505090565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1038054606091600080516020611ea283398151915291610ff390611cc4565b6000602182146111085760405162461bcd60e51b815260206004820152601e60248201527f5374616b696e673a20696e76616c6964207075626b6579206c656e67746800006044820152606401610759565b8282600081811061111b5761111b611c06565b9050013560f81c60f81b6001600160f81b031916600260f81b148061116957508282600081811061114e5761114e611c06565b9050013560f81c60f81b6001600160f81b031916600360f81b145b6111b55760405162461bcd60e51b815260206004820152601e60248201527f5374616b696e673a20696e76616c6964207075626b65792070726566697800006044820152606401610759565b600183013560006111ea858583816111cf576111cf611c06565b919091013560f81c905083600060076401000003d0196113d4565b90506112018282600060076401000003d019611506565b95945050505050565b60006104c883838360076401000003d019611506565b604080517fc9a51567e61a6d1a243a60e57bf4560e7e543694b79349ce2cba3a14fe21b0426020820152908101859052606081018490526000908190611268906080016104ad565b905060006112ac8286868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506115bf92505050565b5050905060006112bc888861160c565b6001600160a01b03928316921691909114979650505050505050565b606060006112ea600184166002611d14565b6040805160f89290921b6001600160f81b03191660208301526021808301969096528051808303909601865260419091019052509192915050565b600061132f611642565b905090565b600080516020611ec283398151915254600160401b900460ff166108e257604051631afcd79f60e31b815260040160405180910390fd5b610e5e611334565b61137b611334565b600080516020611ea28339815191527fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1026113b58482611d7d565b50600381016113c48382611d7d565b5060008082556001909101555050565b60008560ff16600214806113eb57508560ff166003145b6114515760405162461bcd60e51b815260206004820152603160248201527f456c6c697074696343757276653a696e6e76616c696420636f6d7072657373656044820152700c8408a8640e0ded2dce840e0e4caccd2f607b1b6064820152608401610759565b6000828061146157611461611e3d565b838061146f5761146f611e3d565b85858061147e5761147e611e3d565b888a0908848061149057611490611e3d565b858061149e5761149e611e3d565b898a0989090890506114c78160046114b7866001611e53565b6114c19190611e66565b856116b6565b9050600060026114da60ff8a1684611e53565b6114e49190611e7a565b156114f8576114f38285611e8e565b6114fa565b815b98975050505050505050565b60008515806115155750818610155b8061151e575084155b806115295750818510155b1561153657506000611201565b6000828061154657611546611e3d565b86870990506000838061155b5761155b611e3d565b88858061156a5761156a611e3d565b8a8b09099050851561159a57838061158457611584611e3d565b848061159257611592611e3d565b878a09820890505b84156115b45783806115ae576115ae611e3d565b85820890505b149695505050505050565b600080600083516041036115f95760208401516040850151606086015160001a6115eb8882858561178f565b955095509550505050611605565b50508151600091506002905b9250925092565b60408051818152606081018252600091829190602082018180368337505050602081019485526040810193909352505051902090565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61166d61185e565b6116756118c8565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6000816000036117085760405162461bcd60e51b815260206004820152601e60248201527f456c6c697074696343757276653a206d6f64756c7573206973207a65726f00006044820152606401610759565b8360000361171857506000611788565b8260000361172857506001611788565b6001600160ff1b5b801561178457838186161515870a85848509099150836002820486161515870a85848509099150836004820486161515870a85848509099150836008820486161515870a8584850909915060109004611730565b5090505b9392505050565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156117ca5750600091506003905082611854565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561181e573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661184a57506000925060019150829050611854565b9250600091508190505b9450945094915050565b6000600080516020611ea283398151915281611878610fb4565b80519091501561189057805160209091012092915050565b8154801561189f579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b6000600080516020611ea2833981519152816118e2611077565b8051909150156118fa57805160209091012092915050565b6001820154801561189f579392505050565b6000806020838503121561191f57600080fd5b823567ffffffffffffffff8082111561193757600080fd5b818501915085601f83011261194b57600080fd5b81358181111561195a57600080fd5b8660208260051b850101111561196f57600080fd5b60209290920196919550909350505050565b6000806040838503121561199457600080fd5b50508035926020909101359150565b80356001600160a01b03811681146119ba57600080fd5b919050565b600080604083850312156119d257600080fd5b6119db836119a3565b9150602083013580151581146119f057600080fd5b809150509250929050565b600060208284031215611a0d57600080fd5b6104c8826119a3565b60008060408385031215611a2957600080fd5b611a32836119a3565b9150611a40602084016119a3565b90509250929050565b6000815180845260005b81811015611a6f57602081850181015186830182015201611a53565b506000602082860101526020601f19601f83011685010191505092915050565b60ff60f81b881681526000602060e06020840152611ab060e084018a611a49565b8381036040850152611ac2818a611a49565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015611b1657835183529284019291840191600101611afa565b50909c9b505050505050505050505050565b60008083601f840112611b3a57600080fd5b50813567ffffffffffffffff811115611b5257600080fd5b602083019150836020828501011115611b6a57600080fd5b9250929050565b60008060208385031215611b8457600080fd5b823567ffffffffffffffff811115611b9b57600080fd5b611ba785828601611b28565b90969095509350505050565b60008060008060608587031215611bc957600080fd5b8435935060208501359250604085013567ffffffffffffffff811115611bee57600080fd5b611bfa87828801611b28565b95989497509550505050565b634e487b7160e01b600052603260045260246000fd5b6020808252601d908201527f5374616b696e673a20696e73756666696369656e74206465706f736974000000604082015260600190565b634e487b7160e01b600052604160045260246000fd5b604081528260408201528284606083013760006060848301015260006060601f19601f8601168301019050826020830152949350505050565b604081526000611cb56040830185611a49565b90508260208301529392505050565b600181811c90821680611cd857607f821691505b602082108103611cf857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60ff81811683821601908111156104cb576104cb611cfe565b601f821115610466576000816000526020600020601f850160051c81016020861015611d565750805b601f850160051c820191505b81811015611d7557828155600101611d62565b505050505050565b815167ffffffffffffffff811115611d9757611d97611c53565b611dab81611da58454611cc4565b84611d2d565b602080601f831160018114611de05760008415611dc85750858301515b600019600386901b1c1916600185901b178555611d75565b600085815260208120601f198616915b82811015611e0f57888601518255948401946001909101908401611df0565b5085821015611e2d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601260045260246000fd5b808201808211156104cb576104cb611cfe565b600082611e7557611e75611e3d565b500490565b600082611e8957611e89611e3d565b500690565b818103818111156104cb576104cb611cfe56fea16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a264697066735822122057ddea58705967f95dd719b1291a1c26f48f1f5098c7783101c5cdc9cb35c6d664736f6c634300081800336080604052600c8054600160ff199182168117909255601f8054909116909117905534801561002d57600080fd5b5061271f8061003d6000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c8063916a17c61161008c578063ba414fa611610066578063ba414fa614610166578063c04062261461017e578063e20c9f7114610188578063fa7626d41461019057600080fd5b8063916a17c614610141578063b0464fdc14610156578063b5508aa91461015e57600080fd5b80631ed7831c146100d45780632ade3880146100f25780633e5e3c23146101075780633f7286f41461010f57806366d9a9a01461011757806385226c811461012c575b600080fd5b6100dc61019d565b6040516100e99190611eeb565b60405180910390f35b6100fa6101ff565b6040516100e99190611f88565b6100dc610341565b6100dc6103a1565b61011f610401565b6040516100e9919061208e565b61013461056e565b6040516100e99190612115565b61014961063e565b6040516100e99190612179565b610149610724565b61013461080a565b61016e6108da565b60405190151581526020016100e9565b610186610978565b005b6100dc610a74565b601f5461016e9060ff1681565b606060168054806020026020016040519081016040528092919081815260200182805480156101f557602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116101d7575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b8282101561033857600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015610321578382906000526020600020018054610294906121ea565b80601f01602080910402602001604051908101604052809291908181526020018280546102c0906121ea565b801561030d5780601f106102e25761010080835404028352916020019161030d565b820191906000526020600020905b8154815290600101906020018083116102f057829003601f168201915b505050505081526020019060010190610275565b505050508152505081526020019060010190610223565b50505050905090565b606060188054806020026020016040519081016040528092919081815260200182805480156101f5576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116101d7575050505050905090565b606060178054806020026020016040519081016040528092919081815260200182805480156101f5576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116101d7575050505050905090565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156103385783829060005260206000209060020201604051806040016040529081600082018054610458906121ea565b80601f0160208091040260200160405190810160405280929190818152602001828054610484906121ea565b80156104d15780601f106104a6576101008083540402835291602001916104d1565b820191906000526020600020905b8154815290600101906020018083116104b457829003601f168201915b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561055657602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116105185790505b50505050508152505081526020019060010190610425565b6060601a805480602002602001604051908101604052809291908181526020016000905b828210156103385783829060005260206000200180546105b1906121ea565b80601f01602080910402602001604051908101604052809291908181526020018280546105dd906121ea565b801561062a5780601f106105ff5761010080835404028352916020019161062a565b820191906000526020600020905b81548152906001019060200180831161060d57829003601f168201915b505050505081526020019060010190610592565b6060601d805480602002602001604051908101604052809291908181526020016000905b828210156103385760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561070c57602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116106ce5790505b50505050508152505081526020019060010190610662565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156103385760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156107f257602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116107b45790505b50505050508152505081526020019060010190610748565b60606019805480602002602001604051908101604052809291908181526020016000905b8282101561033857838290600052602060002001805461084d906121ea565b80601f0160208091040260200160405190810160405280929190818152602001828054610879906121ea565b80156108c65780601f1061089b576101008083540402835291602001916108c6565b820191906000526020600020905b8154815290600101906020018083116108a957829003601f168201915b50505050508152602001906001019061082e565b60085460009060ff16156108f2575060085460ff1690565b604051630667f9d760e41b81526000805160206126aa833981519152600482018190526519985a5b195960d21b602483015260009163667f9d7090604401602060405180830381865afa15801561094d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109719190612224565b1415905090565b60006000805160206126ca83398151915260001c6001600160a01b0316634ad0bac96040518163ffffffff1660e01b81526004016060604051808303816000875af11580156109cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ef9190612259565b5090915060009050816004811115610a0957610a096122a2565b14610a495760405162461bcd60e51b815260206004820152600c60248201526b1b9bc8189c9bd85918d85cdd60a21b604482015260640160405180910390fd5b610a51610ad4565b610a59610be1565b610a61610e46565b610a696113ba565b610a716117e8565b50565b606060158054806020026020016040519081016040528092919081815260200182805480156101f5576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116101d7575050505050905090565b601f805474cccccc000000000000000000000000000000000100610100600160a81b0319909116179081905560408051638da5cb5b60e01b815290516101009092046001600160a01b031691638da5cb5b916004808201926020929091908290030181865afa158015610b4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6f91906122b8565b602060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550610bbf604051806040016040528060098152602001683b30b634b230ba37b960b91b815250611bef565b602180546001600160a01b0319166001600160a01b0392909216919091179055565b6000806000806000806000601f60019054906101000a90046001600160a01b03166001600160a01b03166384b0196e6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610c3f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c67919081019061240d565b9650965096509650965096509650610cb4876001600160f81b031916600f60f81b6040518060400160405280600e81526020016d4549502d373132206669656c647360901b815250611c01565b610d0286604051806040016040528060078152602001665374616b696e6760c81b8152506040518060400160405280600c81526020016b4549502d373132206e616d6560a01b815250611c62565b610d4d85604051806040016040528060018152602001603160f81b8152506040518060400160405280600f81526020016e22a4a8169b9899103b32b939b4b7b760891b815250611c62565b610d7f84466040518060400160405280600f81526020016e1152540b4dcc4c8818da185a5b9259608a1b815250611c97565b610dd483601f60019054906101000a90046001600160a01b03166040518060400160405280601981526020017f4549502d37313220766572696679696e67436f6e747261637400000000000000815250611ccc565b610e06826000801b6040518060400160405280600c81526020016b1152540b4dcc4c881cd85b1d60a21b815250611c01565b610e3d81516000604051806040016040528060128152602001714549502d37313220657874656e73696f6e7360701b815250611c97565b50505050505050565b6020546040516303223eab60e11b81526001600160a01b0390911660048201526000805160206126aa833981519152906306447d5690602401600060405180830381600087803b158015610e9957600080fd5b505af1158015610ead573d6000803e3d6000fd5b50505050601f60019054906101000a90046001600160a01b03166001600160a01b031663c6a2aac86040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610f0157600080fd5b505af1158015610f15573d6000803e3d6000fd5b50505050610fc3601f60019054906101000a90046001600160a01b03166001600160a01b031663d146fd1b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9391906124da565b60405180604001604052806012815260200171185b1b1bdddb1a5cdd08191a5cd8589b195960721b815250611d01565b60408051600180825281830190925260009160208083019080368337505060215482519293506001600160a01b031691839150600090611005576110056124fc565b6001600160a01b039283166020918202929092010152601f5460405163117407e360e01b81526101009091049091169063117407e390611049908490600401611eeb565b600060405180830381600087803b15801561106357600080fd5b505af1158015611077573d6000803e3d6000fd5b5050601f5460215460405163423b45bd60e11b81526001600160a01b03918216600482015261112f94506101009092041691506384768b7a90602401602060405180830381865afa1580156110d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f491906124da565b6040518060400160405280601a81526020017f76616c696461746f72206e6f7420696e20616c6c6f776c697374000000000000815250611d01565b601f54604051633f0b1edf60e01b81526101009091046001600160a01b031690633f0b1edf90611163908490600401611eeb565b600060405180830381600087803b15801561117d57600080fd5b505af1158015611191573d6000803e3d6000fd5b5050601f5460215460405163423b45bd60e11b81526001600160a01b03918216600482015261124294506101009092041691506384768b7a90602401602060405180830381865afa1580156111ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061120e91906124da565b604051806040016040528060168152602001751d985b1a59185d1bdc881a5b88185b1b1bdddb1a5cdd60521b815250611d60565b601f60019054906101000a90046001600160a01b03166001600160a01b031663cf8e629a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561129257600080fd5b505af11580156112a6573d6000803e3d6000fd5b50505050611353601f60019054906101000a90046001600160a01b03166001600160a01b031663d146fd1b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611300573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132491906124da565b60405180604001604052806011815260200170185b1b1bdddb1a5cdd08195b98589b1959607a1b815250611d60565b6000805160206126ca83398151915260001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561139f57600080fd5b505af11580156113b3573d6000803e3d6000fd5b5050505050565b7ff0e1605dd50ce33553290b778b0f53b2cde5e47a8794c0e7d2815e456e6da3b97f3b12d750493ed6b12b390447f6dd38f587af12ed04ab8d6858e818cf0c63607c7f044e0321a3e57de51e95f2b230b9e4ffed2318578baab1a80652234fe0115d1360006114298383611d93565b601f54604051630a5864bd60e21b815260048101869052602481018590529192506000916101009091046001600160a01b03169063296192f490604401602060405180830381865afa158015611483573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a79190612224565b6040516338d07aa960e21b81526004810187905260248101829052909150600090819081906000805160206126aa8339815191529063e341eaa490604401606060405180830381865afa158015611502573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115269190612512565b60408051602081018490529081018290526001600160f81b031960f885901b166060820152929550909350915060009060610160405160208183030381529060405290506000601f60019054906101000a90046001600160a01b03166001600160a01b03166311bcd8306040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e39190612224565b60215460405163c88a5e6d60e01b81526001600160a01b039091166004820152602481018290529091506000805160206126aa8339815191529063c88a5e6d90604401600060405180830381600087803b15801561164057600080fd5b505af1158015611654573d6000803e3d6000fd5b505050506000805160206126ca83398151915260001c6001600160a01b031663440ed10d6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156116a457600080fd5b505af11580156116b8573d6000803e3d6000fd5b50506021546040516001600160a01b0390911692507fc7abef7b73f049da6a9bc2349ba5066a39e316eabc9f671b6f9406aa9490a45391506116fd908a90859061254f565b60405180910390a260215460405163ca669fa760e01b81526001600160a01b0390911660048201526000805160206126aa8339815191529063ca669fa790602401600060405180830381600087803b15801561175857600080fd5b505af115801561176c573d6000803e3d6000fd5b5050601f54604051633ad2f61160e21b81526101009091046001600160a01b0316925063eb4bd844915083906117aa908d908d908890600401612571565b6000604051808303818588803b1580156117c357600080fd5b505af11580156117d7573d6000803e3d6000fd5b505050505050505050505050505050565b6000601f60019054906101000a90046001600160a01b03166001600160a01b03166359bcddde6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561183d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118619190612224565b6021549091506000805160206126aa8339815191529063c88a5e6d906001600160a01b03166118918460026125af565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156118d757600080fd5b505af11580156118eb573d6000803e3d6000fd5b505050506000805160206126ca83398151915260001c6001600160a01b031663440ed10d6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561193b57600080fd5b505af115801561194f573d6000803e3d6000fd5b50506021546040518481526001600160a01b0390911692508291507f510b11bb3f3c799b11307c01ab7db0d335683ef5b2da98f7697de744f465eacc9060200160405180910390a360215460405163ca669fa760e01b81526001600160a01b0390911660048201526000805160206126aa8339815191529063ca669fa790602401600060405180830381600087803b1580156119ea57600080fd5b505af11580156119fe573d6000803e3d6000fd5b5050601f546021546040516317066a5760e21b81526001600160a01b039182166004820152610100909204169250635c19a95c915083906024016000604051808303818588803b158015611a5157600080fd5b505af1158015611a65573d6000803e3d6000fd5b50505050506000805160206126ca83398151915260001c6001600160a01b031663440ed10d6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611ab657600080fd5b505af1158015611aca573d6000803e3d6000fd5b50506021546040518481526001600160a01b0390911692508291507f510b11bb3f3c799b11307c01ab7db0d335683ef5b2da98f7697de744f465eacc9060200160405180910390a360215460405163ca669fa760e01b81526001600160a01b0390911660048201526000805160206126aa8339815191529063ca669fa790602401600060405180830381600087803b158015611b6557600080fd5b505af1158015611b79573d6000803e3d6000fd5b5050601f546021546040516378fcbe5b60e01b81526001600160a01b039182166004820181905260248201526101009092041692506378fcbe5b915083906044016000604051808303818588803b158015611bd357600080fd5b505af1158015611be7573d6000803e3d6000fd5b505050505050565b6000611bfa82611de1565b5092915050565b604051630c1fa1ed60e41b81526000805160206126aa8339815191529063c1fa1ed090611c3690869086908690600401612571565b60006040518083038186803b158015611c4e57600080fd5b505afa158015610e3d573d6000803e3d6000fd5b6040516306decadb60e31b81526000805160206126aa833981519152906336f656d890611c36908690869086906004016125c6565b6040516388b44c8560e01b81526000805160206126aa833981519152906388b44c8590611c3690869086908690600401612571565b604051632f2769d160e01b81526000805160206126aa83398151915290632f2769d190611c3690869086908690600401612609565b60405163a34edc0360e01b81526000805160206126aa8339815191529063a34edc0390611d349085908590600401612635565b60006040518083038186803b158015611d4c57600080fd5b505afa158015611be7573d6000803e3d6000fd5b604051637ba0480960e01b81526000805160206126aa83398151915290637ba0480990611d349085908590600401612635565b60606000611da5600184166002612650565b6040805160f89290921b6001600160f81b0319166020830152602180830187905281518084039091018152604190920190529150505b92915050565b60008082604051602001611df59190612669565b60408051808303601f190181529082905280516020909101206001625e79b760e01b031982526004820181905291506000805160206126aa8339815191529063ffa1864990602401602060405180830381865afa158015611e5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7e91906122b8565b6040516318caf8e360e31b81529092506000805160206126aa8339815191529063c657c71890611eb49085908790600401612685565b600060405180830381600087803b158015611ece57600080fd5b505af1158015611ee2573d6000803e3d6000fd5b50505050915091565b6020808252825182820181905260009190848201906040850190845b81811015611f2c5783516001600160a01b031683529284019291840191600101611f07565b50909695505050505050565b60005b83811015611f53578181015183820152602001611f3b565b50506000910152565b60008151808452611f74816020860160208601611f38565b601f01601f19169290920160200192915050565b602080825282518282018190526000919060409081850190600581811b8701840188860187805b8581101561203857603f198b8503018752825180516001600160a01b031685528901518985018990528051898601819052908a0190606081881b870181019190870190855b8181101561202257605f19898503018352612010848651611f5c565b948e01949350918d0191600101611ff4565b505050978a019794505091880191600101611faf565b50919a9950505050505050505050565b60008151808452602080850194506020840160005b838110156120835781516001600160e01b0319168752958201959082019060010161205d565b509495945050505050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b8381101561210757888303603f19018552815180518785526120db88860182611f5c565b91890151858303868b01529190506120f38183612048565b9689019694505050908601906001016120b7565b509098975050505050505050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101561216c57603f1988860301845261215a858351611f5c565b9450928501929085019060010161213e565b5092979650505050505050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b8381101561210757888303603f19018552815180516001600160a01b031684528701518784018790526121d787850182612048565b95880195935050908601906001016121a2565b600181811c908216806121fe57607f821691505b60208210810361221e57634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561223657600080fd5b5051919050565b80516001600160a01b038116811461225457600080fd5b919050565b60008060006060848603121561226e57600080fd5b83516005811061227d57600080fd5b925061228b6020850161223d565b91506122996040850161223d565b90509250925092565b634e487b7160e01b600052602160045260246000fd5b6000602082840312156122ca57600080fd5b6122d38261223d565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612319576123196122da565b604052919050565b600082601f83011261233257600080fd5b815167ffffffffffffffff81111561234c5761234c6122da565b61235f601f8201601f19166020016122f0565b81815284602083860101111561237457600080fd5b612385826020830160208701611f38565b949350505050565b600082601f83011261239e57600080fd5b8151602067ffffffffffffffff8211156123ba576123ba6122da565b8160051b6123c98282016122f0565b92835284810182019282810190878511156123e357600080fd5b83870192505b84831015612402578251825291830191908301906123e9565b979650505050505050565b600080600080600080600060e0888a03121561242857600080fd5b87516001600160f81b03198116811461244057600080fd5b602089015190975067ffffffffffffffff8082111561245e57600080fd5b61246a8b838c01612321565b975060408a015191508082111561248057600080fd5b61248c8b838c01612321565b965060608a015195506124a160808b0161223d565b945060a08a0151935060c08a01519150808211156124be57600080fd5b506124cb8a828b0161238d565b91505092959891949750929550565b6000602082840312156124ec57600080fd5b815180151581146122d357600080fd5b634e487b7160e01b600052603260045260246000fd5b60008060006060848603121561252757600080fd5b835160ff8116811461253857600080fd5b602085015160409095015190969495509392505050565b6040815260006125626040830185611f5c565b90508260208301529392505050565b8381528260208201526060604082015260006125906060830184611f5c565b95945050505050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417611ddb57611ddb612599565b6060815260006125d96060830186611f5c565b82810360208401526125eb8186611f5c565b905082810360408401526125ff8185611f5c565b9695505050505050565b6001600160a01b0384811682528316602082015260606040820181905260009061259090830184611f5c565b82151581526040602082015260006123856040830184611f5c565b60ff8181168382160190811115611ddb57611ddb612599565b6000825161267b818460208701611f38565b9190910192915050565b6001600160a01b038316815260406020820181905260009061238590830184611f5c56fe0000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12d885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12da264697066735822122059b2cdb659349006eba64dc524df24ec6f2f327136b0a1740fb0401b15ca3cb464736f6c6343000818003360806040523480156200001157600080fd5b506200001c62000022565b620000d6565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000735760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d35780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b614dc380620000e66000396000f3fe60806040526004361061036b5760003560e01c80638532eb9f116101c6578063b4d5afd1116100f7578063c3d8ad6711610095578063d051c97d1161006f578063d051c97d14610af6578063d533b44514610b37578063f2fde38b14610b57578063f45cc7b814610b7757600080fd5b8063c3d8ad6714610a9a578063c4ab80bc14610aaf578063cf84c81814610acf57600080fd5b8063bff0e84d116100d1578063bff0e84d14610a27578063c21dda4f14610a47578063c26dfc0514610a5a578063c2f9b96814610a7a57600080fd5b8063b4d5afd1146109b2578063b521466d146109e7578063bb8590ad14610a0757600080fd5b8063a480ca7911610164578063afe821981161013e578063afe8219814610925578063afe8af9c14610945578063b187bd261461097b578063b2b2f5bd1461099057600080fd5b8063a480ca79146108b5578063a8a98962146108d5578063aaf1bc97146108f557600080fd5b806397b52062116101a057806397b520621461083e5780639a8a05921461085e578063a10ac97a14610871578063a32eb7c61461089357600080fd5b80638532eb9f146107b35780638da5cb5b146107d35780638dd9523c1461081057600080fd5b80633f4ba83a116102a0578063575420501161023e578063715018a611610218578063715018a61461074d57806378fe53071461076257806383d0cbd9146107895780638456cb591461079e57600080fd5b806357542050146106ca57806366a1eaf31461070b5780636739afca1461072b57600080fd5b806349cc3bf61161027a57806349cc3bf614610643578063500b19e71461065d57806354d26bba1461069557806355e2448e146106aa57600080fd5b80633f4ba83a146105cd5780633fd3b15e146105e2578063461ab4881461062357600080fd5b8063241b71bb1161030d57806330632e8b116102e757806330632e8b1461052557806336d219121461054557806336d853f91461056c5780633aa873301461058c57600080fd5b8063241b71bb1461046057806324278bbe146104905780632f32700e146104c057600080fd5b806310a5a7f71161034957806310a5a7f7146103d3578063110ff5f1146103f35780631d3eb6e31461042b57806323dbce501461044b57600080fd5b80630360d20f1461037057806306c3dc5f1461039c578063103ba701146103b1575b600080fd5b34801561037c57600080fd5b50610385600281565b60405160ff90911681526020015b60405180910390f35b3480156103a857600080fd5b50610385600381565b3480156103bd57600080fd5b506103d16103cc366004614064565b610b9e565b005b3480156103df57600080fd5b506103d16103ee36600461409f565b610bb2565b3480156103ff57600080fd5b50600154610413906001600160401b031681565b6040516001600160401b039091168152602001610393565b34801561043757600080fd5b506103d16104463660046140bc565b610c11565b34801561045757600080fd5b506103d1610d2c565b34801561046c57600080fd5b5061048061047b366004614130565b610d76565b6040519015158152602001610393565b34801561049c57600080fd5b506104806104ab36600461409f565b60056020526000908152604090205460ff1681565b3480156104cc57600080fd5b50604080518082018252600080825260209182015281518083018352600b546001600160401b0381168083526001600160a01b03600160401b909204821692840192835284519081529151169181019190915201610393565b34801561053157600080fd5b506103d1610540366004614149565b610d87565b34801561055157600080fd5b5060015461041390600160401b90046001600160401b031681565b34801561057857600080fd5b506103d161058736600461409f565b611028565b34801561059857600080fd5b506104136105a7366004614184565b60066020908152600092835260408084209091529082529020546001600160401b031681565b3480156105d957600080fd5b506103d1611039565b3480156105ee57600080fd5b506104136105fd366004614184565b60086020908152600092835260408084209091529082529020546001600160401b031681565b34801561062f57600080fd5b5061048061063e3660046141bd565b611074565b34801561064f57600080fd5b506000546103859060ff1681565b34801561066957600080fd5b5060025461067d906001600160a01b031681565b6040516001600160a01b039091168152602001610393565b3480156106a157600080fd5b506103d1611090565b3480156106b657600080fd5b50600b546001600160401b03161515610480565b3480156106d657600080fd5b506104136106e53660046141f9565b600a6020908152600092835260408084209091529082529020546001600160401b031681565b34801561071757600080fd5b506103d161072636600461422e565b6110da565b34801561073757600080fd5b5061074061147a565b6040516103939190614269565b34801561075957600080fd5b506103d161156e565b34801561076e57600080fd5b5060005461041390600160681b90046001600160401b031681565b34801561079557600080fd5b506103d1611582565b3480156107aa57600080fd5b506103d16115cc565b3480156107bf57600080fd5b506103d16107ce36600461431a565b611607565b3480156107df57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031661067d565b34801561081c57600080fd5b5061083061082b3660046143e9565b61171a565b604051908152602001610393565b34801561084a57600080fd5b506103d1610859366004614450565b61179b565b34801561086a57600080fd5b5046610413565b34801561087d57600080fd5b50610830600080516020614d2e83398151915281565b34801561089f57600080fd5b50610830600080516020614d6e83398151915281565b3480156108c157600080fd5b506103d16108d036600461449b565b6117ae565b3480156108e157600080fd5b506103d16108f036600461449b565b611836565b34801561090157600080fd5b5061048061091036600461409f565b60046020526000908152604090205460ff1681565b34801561093157600080fd5b506103d161094036600461409f565b611847565b34801561095157600080fd5b5061041361096036600461409f565b6009602052600090815260409020546001600160401b031681565b34801561098757600080fd5b506104806118a1565b34801561099c57600080fd5b50610830600080516020614d0e83398151915281565b3480156109be57600080fd5b506000546109d4906301000000900461ffff1681565b60405161ffff9091168152602001610393565b3480156109f357600080fd5b506103d1610a023660046144b6565b6118f7565b348015610a1357600080fd5b506103d1610a2236600461409f565b611908565b348015610a3357600080fd5b506103d1610a423660046144b6565b611919565b6103d1610a553660046144da565b61192a565b348015610a6657600080fd5b506000546109d490610100900461ffff1681565b348015610a8657600080fd5b506103d1610a9536600461409f565b611d02565b348015610aa657600080fd5b506103d1611d61565b348015610abb57600080fd5b506103d1610aca366004614450565b611dab565b348015610adb57600080fd5b5060005461041390600160281b90046001600160401b031681565b348015610b0257600080fd5b50610413610b11366004614184565b60076020908152600092835260408084209091529082529020546001600160401b031681565b348015610b4357600080fd5b506103d1610b5236600461409f565b611dbe565b348015610b6357600080fd5b506103d1610b7236600461449b565b611e18565b348015610b8357600080fd5b5060005461041390600160a81b90046001600160401b031681565b610ba6611e53565b610baf81611eae565b50565b610bba611e53565b610bda610bd5600080516020614d0e83398151915283611f4a565b611f93565b6040516001600160401b038216907fcd7910e1c5569d8433ce4ef8e5d51c1bdc03168f614b576da47dc3d2b51d033a90600090a250565b333014610c5d5760405162461bcd60e51b815260206004820152601560248201527427b6b734a837b93a30b61d1037b7363c9039b2b63360591b60448201526064015b60405180910390fd5b600154600b546001600160401b03908116600160401b9092041614610cbe5760405162461bcd60e51b815260206004820152601760248201527627b6b734a837b93a30b61d1037b7363c9031b1b430b4b760491b6044820152606401610c54565b600b54600160401b90046001600160a01b031615610d1e5760405162461bcd60e51b815260206004820152601e60248201527f4f6d6e69506f7274616c3a206f6e6c792063636861696e2073656e64657200006044820152606401610c54565b610d288282612039565b5050565b610d34611e53565b610d4b600080516020614d6e833981519152611f93565b6040517f3d0f9c56dac46156a2db0aa09ee7804770ad9fc9549d21023164f22d69475ed890600090a1565b6000610d81826121b3565b92915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b0316600081158015610dcc5750825b90506000826001600160401b03166001148015610de85750303b155b905081158015610df6575080155b15610e145760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610e3e57845460ff60401b1916600160401b1785555b610e53610e4e602088018861449b565b61221a565b610e6b610e66604088016020890161449b565b61222b565b610e83610e7e60a088016080890161409f565b6122cf565b610e9b610e9660e0880160c089016144b6565b612391565b610eb3610eae60c0880160a0890161409f565b612435565b610ecc610ec7610100880160e089016144b6565b61254e565b610ee6610ee161012088016101008901614064565b611eae565b610f0e610efb6101808801610160890161409f565b610f09610180890189614563565b6125ee565b610f1e606087016040880161409f565b6001805467ffffffffffffffff19166001600160401b0392909216919091179055610f4f608087016060880161409f565b600180546001600160401b0392909216600160401b026fffffffffffffffff000000000000000019909216919091179055610104610fae610f966080890160608a0161409f565b82610fa96101408b016101208c0161409f565b61291d565b610fd9610fc16080890160608a0161409f565b82610fd46101608b016101408c0161409f565b612992565b50831561102057845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b611030611e53565b610baf816122cf565b611041611e53565b6110496129fe565b6040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d1693390600090a1565b6000611089836110848585611f4a565b612a15565b9392505050565b611098611e53565b6110af600080516020614d0e833981519152612a9c565b6040517f4c48c7b71557216a3192842746bdfc381f98d7536d9eb1c6764f3b45e679482790600090a1565b600080516020614d6e8339815191526110f9606083016040840161409f565b611107826110848484611f4a565b156111495760405162461bcd60e51b815260206004820152601260248201527113db5b9a541bdc9d185b0e881c185d5cd95960721b6044820152606401610c54565b611151612b42565b3660006111626101008601866145ac565b909250905060408501600061117a826020890161409f565b600154909150600160401b90046001600160401b03166111a0604084016020850161409f565b6001600160401b0316146111f65760405162461bcd60e51b815260206004820152601b60248201527f4f6d6e69506f7274616c3a2077726f6e672063636861696e20494400000000006044820152606401610c54565b8261123a5760405162461bcd60e51b81526020600482015260146024820152734f6d6e69506f7274616c3a206e6f20786d73677360601b6044820152606401610c54565b6001600160401b03808216600090815260096020526040902054166112a15760405162461bcd60e51b815260206004820152601b60248201527f4f6d6e69506f7274616c3a20756e6b6e6f776e2076616c2073657400000000006044820152606401610c54565b6112a9612b8c565b6001600160401b0316816001600160401b0316101561130a5760405162461bcd60e51b815260206004820152601760248201527f4f6d6e69506f7274616c3a206f6c642076616c207365740000000000000000006044820152606401610c54565b61134e873561131d6101608a018a6145ac565b6001600160401b038086166000908152600a6020908152604080832060099092529091205490911660026003612bdc565b6113925760405162461bcd60e51b81526020600482015260156024820152744f6d6e69506f7274616c3a206e6f2071756f72756d60581b6044820152606401610c54565b6113bb87358386866113a86101208d018d6145ac565b6113b66101408f018f6145ac565b612d90565b6114075760405162461bcd60e51b815260206004820152601960248201527f4f6d6e69506f7274616c3a20696e76616c69642070726f6f66000000000000006044820152606401610c54565b60005b838110156114475761143f83868684818110611428576114286145f5565b905060200281019061143a919061460b565b612e0b565b60010161140a565b505050505061147560017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b505050565b60606003805480602002602001604051908101604052809291908181526020016000905b828210156115655760008481526020908190206040805180820182526002860290920180546001600160401b0316835260018101805483518187028101870190945280845293949193858301939283018282801561154d57602002820191906000526020600020906000905b82829054906101000a90046001600160401b03166001600160401b03168152602001906008019060208260070104928301926001038202915080841161150a5790505b5050505050815250508152602001906001019061149e565b50505050905090565b611576611e53565b611580600061356f565b565b61158a611e53565b6115a1600080516020614d0e833981519152611f93565b6040517f5f335a4032d4cfb6aca7835b0c2225f36d4d9eaa4ed43ee59ed537e02dff6b3990600090a1565b6115d4611e53565b6115dc6135e0565b6040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e75290600090a1565b33301461164e5760405162461bcd60e51b815260206004820152601560248201527427b6b734a837b93a30b61d1037b7363c9039b2b63360591b6044820152606401610c54565b600154600b546001600160401b03908116600160401b90920416146116af5760405162461bcd60e51b815260206004820152601760248201527627b6b734a837b93a30b61d1037b7363c9031b1b430b4b760491b6044820152606401610c54565b600b54600160401b90046001600160a01b03161561170f5760405162461bcd60e51b815260206004820152601e60248201527f4f6d6e69506f7274616c3a206f6e6c792063636861696e2073656e64657200006044820152606401610c54565b6114758383836125ee565b600254604051632376548f60e21b81526000916001600160a01b031690638dd9523c90611751908890889088908890600401614654565b602060405180830381865afa15801561176e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611792919061468c565b95945050505050565b6117a3611e53565b611475838383612992565b6117b6611e53565b60405147906001600160a01b0383169082156108fc029083906000818181858888f193505050501580156117ee573d6000803e3d6000fd5b50816001600160a01b03167f9dc46f23cfb5ddcad0ae7ea2be38d47fec07bb9382ec7e564efc69e036dd66ce8260405161182a91815260200190565b60405180910390a25050565b61183e611e53565b610baf8161222b565b61184f611e53565b61186a610bd5600080516020614d6e83398151915283611f4a565b6040516001600160401b038216907fab78810a0515df65f9f10bfbcb92d03d5df71d9fd3b9414e9ad831a5117d6daa90600090a250565b60006118f2600080516020614d2e833981519152600052600080516020614d4e8339815191526020527ffae9838a178d7f201aa98e2ce5340158edda60bb1e8f168f46503bf3e99f13be5460ff1690565b905090565b6118ff611e53565b610baf81612391565b611910611e53565b610baf81612435565b611921611e53565b610baf8161254e565b600080516020614d0e83398151915286611948826110848484611f4a565b1561198a5760405162461bcd60e51b815260206004820152601260248201527113db5b9a541bdc9d185b0e881c185d5cd95960721b6044820152606401610c54565b6001600160401b03881660009081526005602052604090205460ff166119f25760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a20756e737570706f727465642064657374000000006044820152606401610c54565b6001600160a01b038616611a485760405162461bcd60e51b815260206004820152601b60248201527f4f6d6e69506f7274616c3a206e6f20706f7274616c207863616c6c00000000006044820152606401610c54565b6000546001600160401b03600160281b90910481169084161115611aae5760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e69506f7274616c3a206761734c696d697420746f6f20686967680000006044820152606401610c54565b6000546001600160401b03600160681b90910481169084161015611b145760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a206761734c696d697420746f6f206c6f77000000006044820152606401610c54565b6000546301000000900461ffff16841115611b715760405162461bcd60e51b815260206004820152601a60248201527f4f6d6e69506f7274616c3a206461746120746f6f206c617267650000000000006044820152606401610c54565b60ff808816600081815260046020526040902054909116611bd45760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e69506f7274616c3a20756e737570706f727465642073686172640000006044820152606401610c54565b6000611be28a88888861171a565b905080341015611c345760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a20696e73756666696369656e7420666565000000006044820152606401610c54565b6001600160401b03808b166000908152600660209081526040808320868516845290915281208054600193919291611c6e918591166146bb565b82546101009290920a6001600160401b038181021990931691831602179091558b811660008181526006602090815260408083208886168085529252918290205491519190931693507fb7c8eb9d7a7fbcdab809ab7b8a7c41701eb3115e3fe99d30ff490d8552f72bfa90611cee9033908e908e908e908e908b906146e2565b60405180910390a450505050505050505050565b611d0a611e53565b611d2a611d25600080516020614d6e83398151915283611f4a565b612a9c565b6040516001600160401b038216907fc551305d9bd408be4327b7f8aba28b04ccf6b6c76925392d195ecf9cc764294d90600090a250565b611d69611e53565b611d80600080516020614d6e833981519152612a9c565b6040517f2cb9d71d4c31860b70e9b707c69aa2f5953e03474f00cfcfff205c4745f8287590600090a1565b611db3611e53565b61147583838361291d565b611dc6611e53565b611de1611d25600080516020614d0e83398151915283611f4a565b6040516001600160401b038216907f1ed9223556fb0971076c30172f1f00630efd313b6a05290a562aef95928e712590600090a250565b611e20611e53565b6001600160a01b038116611e4a57604051631e4fbdf760e01b815260006004820152602401610c54565b610baf8161356f565b33611e857f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146115805760405163118cdaa760e01b8152336004820152602401610c54565b60008160ff1611611f015760405162461bcd60e51b815260206004820152601a60248201527f4f6d6e69506f7274616c3a206e6f207a65726f206375746f66660000000000006044820152606401610c54565b6000805460ff191660ff83169081179091556040519081527f1683dc51426224f6e37a3b41dd5849e2db1bfe22366d1d913fa0ef6f757e828f906020015b60405180910390a150565b60008282604051602001611f7592919091825260c01b6001600160c01b031916602082015260280190565b60405160208183030381529060405280519060200120905092915050565b6000818152600080516020614d4e833981519152602081905260409091205460ff1615611ff55760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610c54565b600082815260208290526040808220805460ff191660011790555183917f0cb09dc71d57eeec2046f6854976717e4874a3cf2d6ddeddde337e5b6de6ba3191a25050565b6120416135f7565b3660005b828110156121ad5783838281811061205f5761205f6145f5565b9050602002810190612071919061472d565b6003805460018101825560009190915290925082906002027fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b016120b582826147f6565b50506120be4690565b6001600160401b03166120d4602084018461409f565b6001600160401b031614612122576001600560006120f5602086018661409f565b6001600160401b031681526020810191909152604001600020805460ff19169115159190911790556121a5565b60005b61213260208401846145ac565b90508110156121a35760016004600061214e60208701876145ac565b8581811061215e5761215e6145f5565b9050602002016020810190612173919061409f565b6001600160401b031681526020810191909152604001600020805460ff1916911515919091179055600101612125565b505b600101612045565b50505050565b600080516020614d2e8339815191526000908152600080516020614d4e83398151915260208190527ffae9838a178d7f201aa98e2ce5340158edda60bb1e8f168f46503bf3e99f13be5460ff16806110895750600092835260205250604090205460ff1690565b6122226136f6565b610baf8161373f565b6001600160a01b0381166122815760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e69506f7274616c3a206e6f207a65726f206665654f7261636c650000006044820152606401610c54565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527fd97bdb0db82b52a85aa07f8da78033b1d6e159d94f1e3cbd4109d946c3bcfd3290602001611f3f565b6000546001600160401b03600160681b9091048116908216116123345760405162461bcd60e51b815260206004820152601960248201527f4f6d6e69506f7274616c3a206e6f742061626f7665206d696e000000000000006044820152606401610c54565b600080546cffffffffffffffff00000000001916600160281b6001600160401b038416908102919091179091556040519081527f1153561ac5effc2926ba6c612f86a397c997bc43dfbfc718da08065be0c5fe4d90602001611f3f565b60008161ffff16116123e55760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a206e6f207a65726f206d61782073697a65000000006044820152606401610c54565b6000805464ffff0000001916630100000061ffff8416908102919091179091556040519081527f65923e04419dc810d0ea08a94a7f608d4c4d949818d95c3788f895e575dd206490602001611f3f565b6000816001600160401b03161161248e5760405162461bcd60e51b815260206004820152601b60248201527f4f6d6e69506f7274616c3a206e6f207a65726f206d696e2067617300000000006044820152606401610c54565b6000546001600160401b03600160281b9091048116908216106124f35760405162461bcd60e51b815260206004820152601960248201527f4f6d6e69506f7274616c3a206e6f742062656c6f77206d6178000000000000006044820152606401610c54565b6000805467ffffffffffffffff60681b1916600160681b6001600160401b038416908102919091179091556040519081527f8c852a6291aa436654b167353bca4a4b0c3d024c7562cb5082e7c869bddabf3e90602001611f3f565b60008161ffff16116125a25760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a206e6f207a65726f206d61782073697a65000000006044820152606401610c54565b6000805462ffff00191661010061ffff8416908102919091179091556040519081527f620bbea084306b66a8cc6b5b63830d6b3874f9d2438914e259ffd5065c33f7b090602001611f3f565b808061263c5760405162461bcd60e51b815260206004820152601960248201527f4f6d6e69506f7274616c3a206e6f2076616c696461746f7273000000000000006044820152606401610c54565b6001600160401b0380851660009081526009602052604090205416156126a45760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e69506f7274616c3a206475706c69636174652076616c207365740000006044820152606401610c54565b604080518082018252600080825260208083018290526001600160401b0388168252600a9052918220825b8481101561287c578686828181106126e9576126e96145f5565b9050604002018036038101906126ff919061491e565b80519093506001600160a01b03166127595760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e69506f7274616c3a206e6f207a65726f2076616c696461746f720000006044820152606401610c54565b600083602001516001600160401b0316116127b65760405162461bcd60e51b815260206004820152601960248201527f4f6d6e69506f7274616c3a206e6f207a65726f20706f776572000000000000006044820152606401610c54565b82516001600160a01b03166000908152602083905260409020546001600160401b0316156128265760405162461bcd60e51b815260206004820152601f60248201527f4f6d6e69506f7274616c3a206475706c69636174652076616c696461746f72006044820152606401610c54565b602083015161283590856146bb565b60208481015185516001600160a01b03166000908152918590526040909120805467ffffffffffffffff19166001600160401b0390921691909117905593506001016126cf565b506001600160401b038781166000818152600960205260408120805467ffffffffffffffff191687851617905554600160a81b900490911610156128e0576000805467ffffffffffffffff60a81b1916600160a81b6001600160401b038a16021790555b6040516001600160401b038816907f3a7c2f997a87ba92aedaecd1127f4129cae1283e2809ebf5304d321b943fd10790600090a250505050505050565b6001600160401b03838116600081815260076020908152604080832087861680855290835292819020805467ffffffffffffffff191695871695861790555193845290927f8647aae68c8456a1dcbfaf5eaadc94278ae423526d3f09c7b972bff7355d55c791015b60405180910390a3505050565b6001600160401b03838116600081815260086020908152604080832087861680855290835292819020805467ffffffffffffffff191695871695861790555193845290927fe070f08cae8464c91238e8cbea64ccee5e7b48dd79a843f144e3721ee6bdd9b59101612985565b611580600080516020614d2e833981519152612a9c565b600080516020614d2e8339815191526000908152600080516020614d4e83398151915260208190527ffae9838a178d7f201aa98e2ce5340158edda60bb1e8f168f46503bf3e99f13be5460ff1680612a7b575060008481526020829052604090205460ff165b80612a94575060008381526020829052604090205460ff165b949350505050565b6000818152600080516020614d4e833981519152602081905260409091205460ff16612b015760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610c54565b600082815260208290526040808220805460ff191690555183917fd05bfc2250abb0f8fd265a54c53a24359c5484af63cad2e4ce87c78ab751395a91a25050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00805460011901612b8657604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b6000805460ff8116600160a81b9091046001600160401b031611612bb05750600190565b600054612bd19060ff811690600160a81b90046001600160401b031661497a565b6118f29060016146bb565b6000803660005b88811015612d7d57898982818110612bfd57612bfd6145f5565b9050602002810190612c0f919061472d565b91508015612cc357368a8a612c2560018561499a565b818110612c3457612c346145f5565b9050602002810190612c46919061472d565b9050612c55602082018261449b565b6001600160a01b0316612c6b602085018561449b565b6001600160a01b031611612cc15760405162461bcd60e51b815260206004820152601f60248201527f51756f72756d3a2073696773206e6f7420646564757065642f736f72746564006044820152606401610c54565b505b612ccd828c613747565b612d195760405162461bcd60e51b815260206004820152601960248201527f51756f72756d3a20696e76616c6964207369676e6174757265000000000000006044820152606401610c54565b876000612d29602085018561449b565b6001600160a01b03168152602081019190915260400160002054612d56906001600160401b0316846146bb565b9250612d64838888886137bb565b15612d755760019350505050612d85565b600101612be3565b506000925050505b979650505050505050565b60408051600180825281830190925260009182919060208083019080368337019050509050612dcb86868686612dc68d8d6137f3565b6138c0565b81600081518110612dde57612dde6145f5565b602002602001018181525050612dfd818b612df88c613b21565b613b39565b9a9950505050505050505050565b6000612e1a602084018461409f565b90506000612e2b602084018461409f565b90506000612e3f604085016020860161409f565b90506000612e53606086016040870161409f565b9050466001600160401b0316836001600160401b03161480612e7c57506001600160401b038316155b612ec85760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a2077726f6e67206465737420636861696e000000006044820152606401610c54565b6001600160401b0380851660009081526007602090815260408083208685168452909152902054612efb911660016146bb565b6001600160401b0316816001600160401b031614612f5b5760405162461bcd60e51b815260206004820152601860248201527f4f6d6e69506f7274616c3a2077726f6e67206f666673657400000000000000006044820152606401610c54565b612f6b6060870160408801614064565b60ff16600460ff161480612f93575060ff8216612f8e6060880160408901614064565b60ff16145b612fdf5760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a2077726f6e6720636f6e66206c6576656c000000006044820152606401610c54565b612fef608087016060880161409f565b6001600160401b03858116600090815260086020908152604080832087851684529091529020549181169116101561306f57613031608087016060880161409f565b6001600160401b03858116600090815260086020908152604080832087851684529091529020805467ffffffffffffffff1916929091169190911790555b6001600160401b0380851660009081526007602090815260408083208685168452909152812080546001939192916130a9918591166146bb565b92506101000a8154816001600160401b0302191690836001600160401b03160217905550306001600160a01b03168560800160208101906130ea919061449b565b6001600160a01b0316036131c457806001600160401b0316826001600160401b0316856001600160401b03167f8277cab1f0fa69b34674f64a7d43f242b0bacece6f5b7e8652f1e0d88a9b873b600033600060405160240161317d906020808252601e908201527f4f6d6e69506f7274616c3a206e6f207863616c6c20746f20706f7274616c0000604082015260600190565b60408051601f198184030181529181526020820180516001600160e01b031662461bcd60e51b179052516131b494939291906149fd565b60405180910390a4505050505050565b6000806131d760a088016080890161449b565b6001600160a01b031614905080156133205760006131f860a0880188614a39565b61320191614a7f565b600154909150600160401b90046001600160401b031661322460208a018a61409f565b6001600160401b0316148015613252575060006132476080890160608a0161449b565b6001600160a01b0316145b801561327357506000613268602089018961409f565b6001600160401b0316145b8015613298575061010461328d6040890160208a0161409f565b6001600160401b0316145b80156132ce57506001600160e01b03198116638532eb9f60e01b14806132ce57506001600160e01b03198116631d3eb6e360e01b145b61331a5760405162461bcd60e51b815260206004820152601b60248201527f4f6d6e69506f7274616c3a20696e76616c69642073797363616c6c00000000006044820152606401610c54565b50613404565b600154600160401b90046001600160401b0316613340602089018961409f565b6001600160401b03161415801561337057506000613364608088016060890161449b565b6001600160a01b031614155b801561339257506000613386602088018861409f565b6001600160401b031614155b80156133b857506101046133ac604088016020890161409f565b6001600160401b031614155b6134045760405162461bcd60e51b815260206004820152601960248201527f4f6d6e69506f7274616c3a20696e76616c6964207863616c6c000000000000006044820152606401610c54565b604080518082019091526001600160401b03861681526020810161342e6080890160608a0161449b565b6001600160a01b039081169091528151600b8054602090940151909216600160401b026001600160e01b03199093166001600160401b039091161791909117905560008080836134bb576134b661348b60a08b0160808c0161449b565b61349b60e08c0160c08d0161409f565b6001600160401b03166134b160a08d018d614a39565b613b4f565b6134d0565b6134d06134cb60a08b018b614a39565b613c0f565b600b80546001600160e01b0319169055919450925090506000836134f45782613505565b604051806020016040528060008152505b9050856001600160401b0316876001600160401b03168a6001600160401b03167f8277cab1f0fa69b34674f64a7d43f242b0bacece6f5b7e8652f1e0d88a9b873b8533898760405161355a94939291906149fd565b60405180910390a45050505050505050505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b611580600080516020614d2e833981519152611f93565b6000805b6003548110156136e95760038181548110613618576136186145f5565b9060005260206000209060020201915061362f4690565b82546001600160401b039081169116146136695781546001600160401b03166000908152600560205260409020805460ff191690556136e1565b60005b60018301548110156136df57600060046000856001018481548110613693576136936145f5565b6000918252602080832060048304015460039092166008026101000a9091046001600160401b031683528201929092526040019020805460ff191691151591909117905560010161366c565b505b6001016135fb565b50610baf60036000613fc9565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661158057604051631afcd79f60e31b815260040160405180910390fd5b611e206136f6565b6000613756602084018461449b565b6001600160a01b03166137aa836137706020870187614a39565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613ca692505050565b6001600160a01b0316149392505050565b60006137d360ff84166001600160401b038616614766565b6137e960ff84166001600160401b038816614766565b1195945050505050565b60606000826001600160401b0381111561380f5761380f614750565b604051908082528060200260200182016040528015613838578160200160208202803683370190505b50905060005b838110156138b857613893600286868481811061385d5761385d6145f5565b905060200281019061386f919061460b565b60405160200161387f9190614af4565b604051602081830303815290604052613cd0565b8282815181106138a5576138a56145f5565b602090810291909101015260010161383e565b509392505050565b805160009085846138d2816001614bc3565b6138dc8385614bc3565b146138fa57604051631a8a024960e11b815260040160405180910390fd5b6000816001600160401b0381111561391457613914614750565b60405190808252806020026020018201604052801561393d578160200160208202803683370190505b5090506000806000805b85811015613a8a57600088851061398257858461396381614bd6565b955081518110613975576139756145f5565b60200260200101516139a8565b8a8561398d81614bd6565b96508151811061399f5761399f6145f5565b60200260200101515b905060008d8d848181106139be576139be6145f5565b90506020020160208101906139d39190614bef565b613a00578f8f856139e381614bd6565b96508181106139f4576139f46145f5565b90506020020135613a57565b898610613a31578685613a1281614bd6565b965081518110613a2457613a246145f5565b6020026020010151613a57565b8b86613a3c81614bd6565b975081518110613a4e57613a4e6145f5565b60200260200101515b9050613a638282613d07565b878481518110613a7557613a756145f5565b60209081029190910101525050600101613947565b508415613adc57858114613ab157604051631a8a024960e11b815260040160405180910390fd5b836001860381518110613ac657613ac66145f5565b6020026020010151975050505050505050611792565b8615613af55788600081518110613ac657613ac66145f5565b8c8c6000818110613b0857613b086145f5565b9050602002013597505050505050505095945050505050565b6000610d8160018360405160200161387f9190614c11565b600082613b468584613d36565b14949350505050565b600060606000805a9050600080613bd28960008060019054906101000a900461ffff168b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508e6001600160a01b0316613d7190949392919063ffffffff16565b9150915060005a9050613be6603f8b614c96565b8111613bee57fe5b8282613bfa838761499a565b965096509650505050505b9450945094915050565b600060606000805a9050600080306001600160a01b03168888604051613c36929190614cb8565b6000604051808303816000865af19150503d8060008114613c73576040519150601f19603f3d011682016040523d82523d6000602084013e613c78565b606091505b50915091505a613c88908461499a565b925081613c9757805160208201fd5b909450925090505b9250925092565b600080600080613cb68686613dfb565b925092509250613cc68282613e45565b5090949350505050565b60008282604051602001613ce5929190614cc8565b60408051601f1981840301815282825280516020918201209083015201611f75565b6000818310613d23576000828152602084905260409020611089565b6000838152602083905260409020611089565b600081815b84518110156138b857613d6782868381518110613d5a57613d5a6145f5565b6020026020010151613d07565b9150600101613d3b565b6000606060008060008661ffff166001600160401b03811115613d9657613d96614750565b6040519080825280601f01601f191660200182016040528015613dc0576020820181803683370190505b5090506000808751602089018b8e8ef191503d925086831115613de1578692505b828152826000602083013e90999098509650505050505050565b60008060008351604103613e355760208401516040850151606086015160001a613e2788828585613efe565b955095509550505050613c9f565b5050815160009150600290613c9f565b6000826003811115613e5957613e59614cf7565b03613e62575050565b6001826003811115613e7657613e76614cf7565b03613e945760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115613ea857613ea8614cf7565b03613ec95760405163fce698f760e01b815260048101829052602401610c54565b6003826003811115613edd57613edd614cf7565b03610d28576040516335e2f38360e21b815260048101829052602401610c54565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115613f395750600091506003905082613c05565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015613f8d573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116613fb957506000925060019150829050613c05565b9760009750879650945050505050565b5080546000825560020290600052602060002090810190610baf91905b8082111561401557805467ffffffffffffffff19168155600061400c6001830182614019565b50600201613fe6565b5090565b508054600082556003016004900490600052602060002090810190610baf91905b80821115614015576000815560010161403a565b803560ff8116811461405f57600080fd5b919050565b60006020828403121561407657600080fd5b6110898261404e565b6001600160401b0381168114610baf57600080fd5b803561405f8161407f565b6000602082840312156140b157600080fd5b81356110898161407f565b600080602083850312156140cf57600080fd5b82356001600160401b03808211156140e657600080fd5b818501915085601f8301126140fa57600080fd5b81358181111561410957600080fd5b8660208260051b850101111561411e57600080fd5b60209290920196919550909350505050565b60006020828403121561414257600080fd5b5035919050565b60006020828403121561415b57600080fd5b81356001600160401b0381111561417157600080fd5b82016101a0818503121561108957600080fd5b6000806040838503121561419757600080fd5b82356141a28161407f565b915060208301356141b28161407f565b809150509250929050565b600080604083850312156141d057600080fd5b8235915060208301356141b28161407f565b80356001600160a01b038116811461405f57600080fd5b6000806040838503121561420c57600080fd5b82356142178161407f565b9150614225602084016141e2565b90509250929050565b60006020828403121561424057600080fd5b81356001600160401b0381111561425657600080fd5b8201610180818503121561108957600080fd5b600060208083018184528085518083526040925060408601915060408160051b8701018488016000805b8481101561430b57898403603f19018652825180516001600160401b039081168652908901518986018990528051898701819052908a0191849160608801905b808410156142f557845183168252938c019360019390930192908c01906142d3565b50988b0198965050509288019250600101614293565b50919998505050505050505050565b60008060006040848603121561432f57600080fd5b833561433a8161407f565b925060208401356001600160401b038082111561435657600080fd5b818601915086601f83011261436a57600080fd5b81358181111561437957600080fd5b8760208260061b850101111561438e57600080fd5b6020830194508093505050509250925092565b60008083601f8401126143b357600080fd5b5081356001600160401b038111156143ca57600080fd5b6020830191508360208285010111156143e257600080fd5b9250929050565b600080600080606085870312156143ff57600080fd5b843561440a8161407f565b935060208501356001600160401b0381111561442557600080fd5b614431878288016143a1565b90945092505060408501356144458161407f565b939692955090935050565b60008060006060848603121561446557600080fd5b83356144708161407f565b925060208401356144808161407f565b915060408401356144908161407f565b809150509250925092565b6000602082840312156144ad57600080fd5b611089826141e2565b6000602082840312156144c857600080fd5b813561ffff8116811461108957600080fd5b60008060008060008060a087890312156144f357600080fd5b86356144fe8161407f565b955061450c6020880161404e565b945061451a604088016141e2565b935060608701356001600160401b0381111561453557600080fd5b61454189828a016143a1565b90945092505060808701356145558161407f565b809150509295509295509295565b6000808335601e1984360301811261457a57600080fd5b8301803591506001600160401b0382111561459457600080fd5b6020019150600681901b36038213156143e257600080fd5b6000808335601e198436030181126145c357600080fd5b8301803591506001600160401b038211156145dd57600080fd5b6020019150600581901b36038213156143e257600080fd5b634e487b7160e01b600052603260045260246000fd5b6000823560de1983360301811261462157600080fd5b9190910192915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60006001600160401b0380871683526060602084015261467860608401868861462b565b915080841660408401525095945050505050565b60006020828403121561469e57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b6001600160401b038181168382160190808211156146db576146db6146a5565b5092915050565b6001600160a01b0387811682528616602082015260a06040820181905260009061470f908301868861462b565b6001600160401b039490941660608301525060800152949350505050565b60008235603e1983360301811261462157600080fd5b60008135610d818161407f565b634e487b7160e01b600052604160045260246000fd5b8082028115828204841417610d8157610d816146a5565b600160401b82111561479157614791614750565b8054828255808310156114755760008260005260206000206003850160021c81016003840160021c8201915060188660031b1680156147e1576000198083018054828460200360031b1c16815550505b505b81811015611020578281556001016147e3565b81356148018161407f565b815467ffffffffffffffff19166001600160401b0391821617825560019081830160208581013536879003601e1901811261483b57600080fd5b860180358481111561484c57600080fd5b6020820194508060051b360385131561486457600080fd5b61486e818561477d565b60009384526020842093600282901c92505b828110156148d7576000805b60048110156148cb576148be6148a189614743565b6001600160401b03908116600684901b90811b91901b1984161790565b978601979150880161488c565b50858201558601614880565b506003198116808203818314614912576000805b8281101561490c576148ff6148a18a614743565b98870198915089016148eb565b50868501555b50505050505050505050565b60006040828403121561493057600080fd5b604051604081018181106001600160401b038211171561495257614952614750565b60405261495e836141e2565b8152602083013561496e8161407f565b60208201529392505050565b6001600160401b038281168282160390808211156146db576146db6146a5565b81810381811115610d8157610d816146a5565b60005b838110156149c85781810151838201526020016149b0565b50506000910152565b600081518084526149e98160208601602086016149ad565b601f01601f19169290920160200192915050565b8481526001600160a01b03841660208201528215156040820152608060608201819052600090614a2f908301846149d1565b9695505050505050565b6000808335601e19843603018112614a5057600080fd5b8301803591506001600160401b03821115614a6a57600080fd5b6020019150368190038213156143e257600080fd5b6001600160e01b03198135818116916004851015614aa75780818660040360031b1b83161692505b505092915050565b6000808335601e19843603018112614ac657600080fd5b83016020810192503590506001600160401b03811115614ae557600080fd5b8036038213156143e257600080fd5b6020815260008235614b058161407f565b6001600160401b03808216602085015260208501359150614b258261407f565b808216604085015260408501359150614b3d8261407f565b166060838101919091526001600160a01b0390614b5b9085016141e2565b166080830152614b6d608084016141e2565b6001600160a01b03811660a084015250614b8a60a0840184614aaf565b60e060c0850152614ba06101008501828461462b565b915050614baf60c08501614094565b6001600160401b03811660e08501526138b8565b80820180821115610d8157610d816146a5565b600060018201614be857614be86146a5565b5060010190565b600060208284031215614c0157600080fd5b8135801515811461108957600080fd5b60c081018235614c208161407f565b6001600160401b039081168352602084013590614c3c8261407f565b808216602085015260ff614c526040870161404e565b16604085015260608501359150614c688261407f565b9081166060840152608084013590614c7f8261407f565b16608083015260a092830135929091019190915290565b600082614cb357634e487b7160e01b600052601260045260246000fd5b500490565b8183823760009101908152919050565b60ff60f81b8360f81b16815260008251614ce98160018501602087016149ad565b919091016001019392505050565b634e487b7160e01b600052602160045260246000fdfea06a0c1264badca141841b5f52470407dac9adaaa539dd445540986341b73a6876e8952e4b09b8d505aa08998d716721a1dbf0884ac74202e33985da1ed005e9ff37105740f03695c8f3597f3aff2b92fbe1c80abea3c28731ecff2efd693400feccba1cfc4544bf9cd83b76f36ae5c464750b6c43f682e26744ee21ec31fc1ea2646970667358221220454d7eedaed3573a1dadea3ef0737446649e36b76c0557c768966f395a0de7d164736f6c63430008180033608060405234801561001057600080fd5b5061001961001e565b6100d0565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161561006e5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100cd5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6118a3806100df6000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c8063715018a611610066578063715018a6146101395780638da5cb5b14610141578063ada867981461017b578063c4d66de81461019b578063f2fde38b146101ae57600080fd5b80630f560cd7146100a357806321d93090146100c157806347153cbf146100ec578063473d04521461010157806352d482e214610126575b600080fd5b6100ab6101c1565b6040516100b891906110e6565b60405180910390f35b6100d46100cf36600461114a565b610462565b6040516001600160401b0390911681526020016100b8565b6100ff6100fa366004611163565b61049f565b005b61011461010f3660046111b9565b6104b3565b6040516100b8969594939291906111d6565b6100ff610134366004611221565b610597565b6100ff6105ff565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546040516001600160a01b0390911681526020016100b8565b61018e6101893660046111b9565b610613565b6040516100b89190611295565b6100ff6101a93660046112bd565b6107d8565b6100ff6101bc3660046112bd565b6108e6565b60008054606091906001600160401b038111156101e0576101e06112da565b60405190808252806020026020018201604052801561024957816020015b6040805160e081018252600080825260208083018290529282018190526060808301829052608083019190915260a0820181905260c082015282526000199092019101816101fe5790505b50905060005b6000546001600160401b038216101561045c576001600080836001600160401b031681548110610281576102816112f0565b6000918252602080832060048304015460039092166008026101000a9091046001600160401b039081168452838201949094526040928301909120825160e08101845281546001600160a01b0381168252600160a01b9004851681840152600182015480861682860152600160401b810486166060830152600160801b90049094166080850152600281018054845181850281018501909552808552919360a086019390929083018282801561038857602002820191906000526020600020906000905b82829054906101000a90046001600160401b03166001600160401b0316815260200190600801906020826007010492830192600103820291508084116103455790505b505050505081526020016003820180546103a190611306565b80601f01602080910402602001604051908101604052809291908181526020018280546103cd90611306565b801561041a5780601f106103ef5761010080835404028352916020019161041a565b820191906000526020600020905b8154815290600101906020018083116103fd57829003601f168201915b50505050508152505082826001600160401b03168151811061043e5761043e6112f0565b602002602001018190525080806104549061133a565b91505061024f565b50919050565b6000818154811061047257600080fd5b9060005260206000209060049182820401919006600802915054906101000a90046001600160401b031681565b6104a7610926565b6104b081610981565b50565b60016020819052600091825260409091208054918101546003820180546001600160a01b038516946001600160401b03600160a01b90910481169484821694600160401b8104831694600160801b9091049092169290919061051490611306565b80601f016020809104026020016040519081016040528092919081815260200182805461054090611306565b801561058d5780601f106105625761010080835404028352916020019161058d565b820191906000526020600020905b81548152906001019060200180831161057057829003601f168201915b5050505050905086565b61059f610926565b60005b6001600160401b0381168211156105fa576105e88383836001600160401b03168181106105d1576105d16112f0565b90506020028101906105e3919061136e565b610981565b806105f28161133a565b9150506105a2565b505050565b610607610926565b6106116000610ef6565b565b6040805160e0810182526000808252602082018190529181018290526060808201839052608082019290925260a0810182905260c08101919091526001600160401b03808316600090815260016020818152604092839020835160e08101855281546001600160a01b0381168252600160a01b90048616818401529281015480861684860152600160401b810486166060850152600160801b9004909416608083015260028401805484518184028101840190955280855292949360a0860193909283018282801561073657602002820191906000526020600020906000905b82829054906101000a90046001600160401b03166001600160401b0316815260200190600801906020826007010492830192600103820291508084116106f35790505b5050505050815260200160038201805461074f90611306565b80601f016020809104026020016040519081016040528092919081815260200182805461077b90611306565b80156107c85780601f1061079d576101008083540402835291602001916107c8565b820191906000526020600020905b8154815290600101906020018083116107ab57829003601f168201915b5050505050815250509050919050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b031660008115801561081d5750825b90506000826001600160401b031660011480156108395750303b155b905081158015610847575080155b156108655760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561088f57845460ff60401b1916600160401b1785555b61089886610f67565b83156108de57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b6108ee610926565b6001600160a01b03811661091d57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6104b081610ef6565b336109587f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146106115760405163118cdaa760e01b8152336004820152602401610914565b600061099060208301836112bd565b6001600160a01b0316036109e65760405162461bcd60e51b815260206004820152601960248201527f506f7274616c52656769737472793a207a65726f2061646472000000000000006044820152606401610914565b60006109f860408301602084016111b9565b6001600160401b031611610a4e5760405162461bcd60e51b815260206004820152601d60248201527f506f7274616c52656769737472793a207a65726f20636861696e2049440000006044820152606401610914565b6000610a6060808301606084016111b9565b6001600160401b031611610ab65760405162461bcd60e51b815260206004820152601d60248201527f506f7274616c52656769737472793a207a65726f20696e74657276616c0000006044820152606401610914565b677fffffffffffffff610acf60a08301608084016111b9565b6001600160401b03161115610b265760405162461bcd60e51b815260206004820181905260248201527f506f7274616c52656769737472793a20706572696f6420746f6f206c617267656044820152606401610914565b6000610b3860a08301608084016111b9565b6001600160401b031611610b8e5760405162461bcd60e51b815260206004820152601b60248201527f506f7274616c52656769737472793a207a65726f20706572696f6400000000006044820152606401610914565b6000610b9d60c083018361138e565b905011610bec5760405162461bcd60e51b815260206004820152601760248201527f506f7274616c52656769737472793a206e6f206e616d650000000000000000006044820152606401610914565b6000610bfb60a08301836113db565b905011610c4a5760405162461bcd60e51b815260206004820152601960248201527f506f7274616c52656769737472793a206e6f20736861726473000000000000006044820152606401610914565b6000600181610c5f60408501602086016111b9565b6001600160401b031681526020810191909152604001600020546001600160a01b031614610ccf5760405162461bcd60e51b815260206004820152601b60248201527f506f7274616c52656769737472793a20616c72656164792073657400000000006044820152606401610914565b60005b610cdf60a08301836113db565b9050816001600160401b03161015610dae576000610d0060a08401846113db565b836001600160401b0316818110610d1957610d196112f0565b9050602002016020810190610d2e91906111b9565b90508060ff16816001600160401b0316148015610d4f5750610d4f81610f78565b610d9b5760405162461bcd60e51b815260206004820152601d60248201527f506f7274616c52656769737472793a20696e76616c69642073686172640000006044820152606401610914565b5080610da68161133a565b915050610cd2565b508060016000610dc460408401602085016111b9565b6001600160401b031681526020810191909152604001600020610de7828261168b565b5060009050610dfc60408301602084016111b9565b815460018101835560009283526020928390206004820401805460039092166008026101000a6001600160401b03818102199093169390921691909102919091179055610e4b908201826112bd565b6001600160a01b0316610e6460408301602084016111b9565b6001600160401b03167fb08d1911b978b0c040fa5e01711aa326770a97c5f00039d45e7ae8dec7409e73610e9e60608501604086016111b9565b610eae60808601606087016111b9565b610ebe60a08701608088016111b9565b610ecb60a08801886113db565b610ed860c08a018a61138e565b604051610eeb97969594939291906117d4565b60405180910390a350565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b610f6f610f95565b6104b081610fde565b600060ff821660011480610f8f575060ff82166004145b92915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661061157604051631afcd79f60e31b815260040160405180910390fd5b6108ee610f95565b6000815180845260005b8181101561100c57602081850181015186830182015201610ff0565b506000602082860101526020601f19601f83011685010191505092915050565b600060e0830160018060a01b0383511684526020808401516001600160401b03808216602088015280604087015116604088015280606087015116606088015280608087015116608088015260a0860151915060e060a088015283825180865261010089019150602084019550600093505b808410156110c05785518316825294840194600193909301929084019061109e565b5060c0870151945087810360c08901526110da8186610fe6565b98975050505050505050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101561113d57603f1988860301845261112b85835161102c565b9450928501929085019060010161110f565b5092979650505050505050565b60006020828403121561115c57600080fd5b5035919050565b60006020828403121561117557600080fd5b81356001600160401b0381111561118b57600080fd5b820160e0818503121561119d57600080fd5b9392505050565b6001600160401b03811681146104b057600080fd5b6000602082840312156111cb57600080fd5b813561119d816111a4565b6001600160a01b03871681526001600160401b038681166020830152858116604083015284811660608301528316608082015260c060a082018190526000906110da90830184610fe6565b6000806020838503121561123457600080fd5b82356001600160401b038082111561124b57600080fd5b818501915085601f83011261125f57600080fd5b81358181111561126e57600080fd5b8660208260051b850101111561128357600080fd5b60209290920196919550909350505050565b60208152600061119d602083018461102c565b6001600160a01b03811681146104b057600080fd5b6000602082840312156112cf57600080fd5b813561119d816112a8565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600181811c9082168061131a57607f821691505b60208210810361045c57634e487b7160e01b600052602260045260246000fd5b60006001600160401b0380831681810361136457634e487b7160e01b600052601160045260246000fd5b6001019392505050565b6000823560de1983360301811261138457600080fd5b9190910192915050565b6000808335601e198436030181126113a557600080fd5b8301803591506001600160401b038211156113bf57600080fd5b6020019150368190038213156113d457600080fd5b9250929050565b6000808335601e198436030181126113f257600080fd5b8301803591506001600160401b0382111561140c57600080fd5b6020019150600581901b36038213156113d457600080fd5b60008135610f8f816111a4565b5b818110156114465760008155600101611432565b5050565b600160401b82111561145e5761145e6112da565b8054828255808310156105fa578160005260206000206003840160021c810160188560031b1680156114a1576000198083018054828460200360031b1c16815550505b506114b46003840160021c830182611431565b5050505050565b6001600160401b038311156114d2576114d26112da565b6114dc838261144a565b60008181526020902082908460021c60005b8181101561154a576000805b600481101561153d5761152c61150f87611424565b6001600160401b03908116600684901b90811b91901b1984161790565b6020969096019591506001016114fa565b50838201556001016114ee565b506003198616808703818814611589576000805b828110156115835761157261150f88611424565b60209790970196915060010161155e565b50848401555b5050505050505050565b601f8211156105fa57806000526020600020601f840160051c810160208510156115ba5750805b6114b4601f850160051c830182611431565b6001600160401b038311156115e3576115e36112da565b6115f7836115f18354611306565b83611593565b6000601f84116001811461162b57600085156116135750838201355b600019600387901b1c1916600186901b1783556114b4565b600083815260209020601f19861690835b8281101561165c578685013582556020948501946001909201910161163c565b50868210156116795760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b8135611696816112a8565b81546001600160a01b031981166001600160a01b0392909216918217835560208401356116c2816111a4565b6001600160e01b03199190911690911760a09190911b67ffffffffffffffff60a01b16178155600181016117196116fb60408501611424565b825467ffffffffffffffff19166001600160401b0391909116178255565b61175a61172860608501611424565b82546fffffffffffffffff0000000000000000191660409190911b6fffffffffffffffff000000000000000016178255565b61179561176960808501611424565b82805467ffffffffffffffff60801b191660809290921b67ffffffffffffffff60801b16919091179055565b506117a360a08301836113db565b6117b18183600286016114bb565b50506117c060c083018361138e565b6117ce8183600386016115cc565b50505050565b600060a082016001600160401b03808b1684526020818b1681860152818a16604086015260a060608601528288845260c08601905089935060005b89811015611836578435611822816111a4565b84168252938201939082019060010161180f565b5085810360808701528681528688838301376000818801830152601f909601601f19169095019094019a995050505050505050505056fea264697066735822122066a215c17c478767affbf71a599fc178d8376e3fd9656b738f043e4c0814e59064736f6c63430008180033608060405234801561001057600080fd5b5061001961001e565b6100d0565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161561006e5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100cd5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b61187e806100df6000396000f3fe6080604052600436106101665760003560e01c80637adbf973116100d1578063a67265b11161008a578063dbb602fd11610064578063dbb602fd14610440578063df18e04714610460578063ed1bd76c1461048d578063f2fde38b146104ad57600080fd5b8063a67265b1146103da578063c4918b4e146103fa578063ca48b20b1461041057600080fd5b80637adbf973146103135780637dc0d1d0146103335780638456cb59146103535780638aec67fe146103685780638da5cb5b1461037d578063a3dace5d146103ba57600080fd5b80634b260981116101235780634b2609811461023657806351cff8d91461024c57806355e0af6b1461026c5780635c975abb1461029b578063715018a6146102cb57806374eeb847146102e057600080fd5b806308a957a91461016b5780630e6e91d81461018d578063285aaa20146101ad57806339acf9f1146101d65780633f4ba83a1461020e5780634ae809ee14610223575b600080fd5b34801561017757600080fd5b5061018b61018636600461161f565b6104cd565b005b34801561019957600080fd5b5061018b6101a8366004611648565b6104e1565b3480156101b957600080fd5b506101c360355481565b6040519081526020015b60405180910390f35b3480156101e257600080fd5b506000546101f6906001600160a01b031681565b6040516001600160a01b0390911681526020016101cd565b34801561021a57600080fd5b5061018b6104f2565b6101c361023136600461161f565b610504565b34801561024257600080fd5b506101c36103e881565b34801561025857600080fd5b5061018b61026736600461161f565b61076e565b34801561027857600080fd5b5061028c610287366004611648565b61086f565b6040516101cd939291906116a7565b3480156102a757600080fd5b506000805160206118298339815191525460ff1660405190151581526020016101cd565b3480156102d757600080fd5b5061018b610951565b3480156102ec57600080fd5b5060005461030190600160a01b900460ff1681565b60405160ff90911681526020016101cd565b34801561031f57600080fd5b5061018b61032e36600461161f565b610963565b34801561033f57600080fd5b506032546101f6906001600160a01b031681565b34801561035f57600080fd5b5061018b610974565b34801561037457600080fd5b506101c3610984565b34801561038957600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166101f6565b3480156103c657600080fd5b5061018b6103d5366004611648565b6109f2565b3480156103e657600080fd5b5061018b6103f53660046116d1565b610a03565b34801561040657600080fd5b506101c360345481565b34801561041c57600080fd5b50610427620222e081565b60405167ffffffffffffffff90911681526020016101cd565b34801561044c57600080fd5b506033546101f6906001600160a01b031681565b34801561046c57600080fd5b506101c361047b36600461161f565b60366020526000908152604090205481565b34801561049957600080fd5b506101c36104a8366004611648565b610b83565b3480156104b957600080fd5b5061018b6104c836600461161f565b610bd2565b6104d5610c0d565b6104de81610c68565b50565b6104e9610c0d565b6104de81610d13565b6104fa610c0d565b610502610d90565b565b600061050e610dea565b6001600160a01b0382166105655760405162461bcd60e51b815260206004820152601960248201527827b6b734a3b0b9a83ab6b81d103737903d32b9379030b2323960391b60448201526064015b60405180910390fd5b600061056f610984565b9050803410156105c15760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e6947617350756d703a20696e73756666696369656e7420666565000000604482015260640161055c565b60006105cd82346116ff565b90506034548111156106195760405162461bcd60e51b815260206004820152601560248201527409edadcd28ec2e6a0eadae07440deeccae440dac2f605b1b604482015260640161055c565b60006103e86035548361062c9190611712565b6106369190611729565b905061064281836116ff565b9150600061064f83610e1b565b6001600160a01b03871660009081526036602052604081208054929350839290919061067c90849061174b565b909155506106f9905061068d610f31565b6033546001600160a01b038981166000818152603660205260409081902054905160248101929092526044820152600192919091169060640160408051601f198184030181529190526020810180516001600160e01b0316631decdcfb60e11b179052620222e0610fae565b506001600160a01b038616600081815260366020908152604091829020548251908152349181019190915290810186905260608101849052608081018390527f7737fe59897f758714c24688a6470bb05235f01af1f4293edd0c290e651dd8319060a00160405180910390a295945050505050565b610776610c0d565b6001600160a01b0381166107c85760405162461bcd60e51b815260206004820152601960248201527827b6b734a3b0b9a83ab6b81d103737903d32b9379030b2323960391b604482015260640161055c565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610815576040519150601f19603f3d011682016040523d82523d6000602084013e61081a565b606091505b505090508061086b5760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e6947617350756d703a207769746864726177206661696c656400000000604482015260640161055c565b5050565b6000806060600061087e610984565b9050808510156108bd57505060408051808201909152601081526f696e73756666696369656e742066656560801b60208201526000925082915061094a565b6108c781866116ff565b94506034548511156109005750506040805180820190915260088152670deeccae440dac2f60c31b60208201526000925082915061094a565b6103e8603554866109119190611712565b61091b9190611729565b61092590866116ff565b945061093085610e1b565b600160405180602001604052806000815250935093509350505b9193909250565b610959610c0d565b61050260006110ed565b61096b610c0d565b6104de8161115e565b61097c610c0d565b610502611202565b60006001600160a01b036000196109eb61099c610f31565b6040516001600160a01b03851660248201526044810184905260640160408051601f198184030181529190526020810180516001600160e01b0316631decdcfb60e11b179052620222e061124b565b9250505090565b6109fa610c0d565b6104de816112c9565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff16600081158015610a495750825b905060008267ffffffffffffffff166001148015610a665750303b155b905081158015610a74575080155b15610a925760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610abc57845460ff60401b1916600160401b1785555b610ad4610acf604088016020890161161f565b61115e565b610ae9610ae4602088018861161f565b610c68565b610af68660800135610d13565b610b038660a001356112c9565b610b1d610b16606088016040890161161f565b600161134f565b610b35610b30608088016060890161161f565b611369565b8315610b7b57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b600080610b8f8361137a565b90506035546103e8610ba191906116ff565b610bad6103e883611712565b610bb79190611729565b9050610bc1610984565b610bcb908261174b565b9392505050565b610bda610c0d565b6001600160a01b038116610c0457604051631e4fbdf760e01b81526000600482015260240161055c565b6104de816110ed565b33610c3f7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146105025760405163118cdaa760e01b815233600482015260240161055c565b6001600160a01b038116610cbe5760405162461bcd60e51b815260206004820152601960248201527f4f6d6e6947617350756d703a207a65726f206164647265737300000000000000604482015260640161055c565b603380546001600160a01b0319166001600160a01b0383169081179091556040519081527ffd263e3b7583e8397be8a61710d1105cf8c0f111bbac1014d0ec7dbcd1e422f1906020015b60405180910390a150565b60008111610d5b5760405162461bcd60e51b815260206004820152601560248201527409edadcd28ec2e6a0eadae07440f4cae4de40dac2f605b1b604482015260640161055c565b60348190556040518181527f343ecf9262f8cafd2e9b0ffdab9f14bf18a17899eeef3e41133e84c354e5298390602001610d08565b610d98611446565b600080516020611829833981519152805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b039091168152602001610d08565b6000805160206118298339815191525460ff16156105025760405163d93c066560e01b815260040160405180910390fd5b6032546000906001600160a01b0316638b7bfd70610e37610f31565b6040516001600160e01b031960e084901b16815267ffffffffffffffff9091166004820152602401602060405180830381865afa158015610e7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea0919061175e565b603260009054906101000a90046001600160a01b03166001600160a01b0316638f9d6ace6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ef3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f17919061175e565b610f219084611712565b610f2b9190611729565b92915050565b60008060009054906101000a90046001600160a01b03166001600160a01b031663110ff5f16040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa99190611777565b905090565b60008054604051632376548f60e21b815282916001600160a01b031690638dd9523c90610fe3908a90889088906004016117a1565b602060405180830381865afa158015611000573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611024919061175e565b9050804710156110765760405162461bcd60e51b815260206004820152601860248201527f584170703a20696e73756666696369656e742066756e64730000000000000000604482015260640161055c565b60005460405163c21dda4f60e01b81526001600160a01b039091169063c21dda4f9083906110b0908b908b908b908b908b906004016117d8565b6000604051808303818588803b1580156110c957600080fd5b505af11580156110dd573d6000803e3d6000fd5b50939a9950505050505050505050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6001600160a01b0381166111b45760405162461bcd60e51b815260206004820152601860248201527f4f6d6e6947617350756d703a207a65726f206f7261636c650000000000000000604482015260640161055c565b603280546001600160a01b0319166001600160a01b0383169081179091556040519081527f3f32684a32a11dabdbb8c0177de80aa3ae36a004d75210335b49e544e48cd0aa90602001610d08565b61120a610dea565b600080516020611829833981519152805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610dd2565b60008054604051632376548f60e21b81526001600160a01b0390911690638dd9523c90611280908790879087906004016117a1565b602060405180830381865afa15801561129d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c1919061175e565b949350505050565b6103e8811061131a5760405162461bcd60e51b815260206004820152601960248201527f4f6d6e6947617350756d703a2070637420746f6f206869676800000000000000604482015260640161055c565b60358190556040518181527f0b3d400288f60ce0f5632cd941b5748faa91ebea844cbe78c5180b7838a0933f90602001610d08565b611357611476565b611360826114bf565b61086b81611558565b611371611476565b6104de816115fb565b603254604080516347ceb56760e11b815290516000926001600160a01b031691638f9d6ace9160048083019260209291908290030181865afa1580156113c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e8919061175e565b6032546001600160a01b0316638b7bfd70611401610f31565b6040516001600160e01b031960e084901b16815267ffffffffffffffff9091166004820152602401602060405180830381865afa158015610ef3573d6000803e3d6000fd5b6000805160206118298339815191525460ff1661050257604051638dfc202b60e01b815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661050257604051631afcd79f60e31b815260040160405180910390fd5b6001600160a01b03811661150a5760405162461bcd60e51b8152602060048201526012602482015271584170703a206e6f207a65726f206f6d6e6960701b604482015260640161055c565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f79162c8d053a07e70cdc1ccc536f0440b571f8508377d2bef51094fadab98f4790602001610d08565b61156181611603565b6115ad5760405162461bcd60e51b815260206004820152601860248201527f584170703a20696e76616c696420636f6e66206c6576656c0000000000000000604482015260640161055c565b6000805460ff60a01b1916600160a01b60ff8416908102919091179091556040519081527f8de08a798b4e50b4f351c1eaa91a11530043802be3ffac2df87db0c45a2e848390602001610d08565b610bda611476565b600060ff821660011480610f2b575060ff821660041492915050565b60006020828403121561163157600080fd5b81356001600160a01b0381168114610bcb57600080fd5b60006020828403121561165a57600080fd5b5035919050565b6000815180845260005b818110156116875760208185018101518683018201520161166b565b506000602082860101526020601f19601f83011685010191505092915050565b83815282151560208201526060604082015260006116c86060830184611661565b95945050505050565b600060c082840312156116e357600080fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610f2b57610f2b6116e9565b8082028115828204841417610f2b57610f2b6116e9565b60008261174657634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610f2b57610f2b6116e9565b60006020828403121561177057600080fd5b5051919050565b60006020828403121561178957600080fd5b815167ffffffffffffffff81168114610bcb57600080fd5b600067ffffffffffffffff8086168352606060208401526117c56060840186611661565b9150808416604084015250949350505050565b600067ffffffffffffffff808816835260ff8716602084015260018060a01b038616604084015260a0606084015261181360a0840186611661565b9150808416608084015250969550505050505056fecd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300a2646970667358221220337439e9ecaed206db72d1ece6e5c9f7cbfb208da96e898f91811c4a29fccc0264736f6c63430008180033608060405234801561001057600080fd5b5061001961001e565b6100d0565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161561006e5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100cd5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6111fe806100df6000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c80638f9d6ace116100ad578063b48ec86111610071578063b48ec86114610352578063d070415714610385578063d0ebdbe7146103b1578063ee590a53146103c4578063f2fde38b146103d757600080fd5b80638f9d6ace1461030657806393a871881461031057806398563b0314610323578063a34e7abb14610336578063b0e21e8a1461034957600080fd5b8063787dce3d116100f4578063787dce3d146102635780638b7bfd70146102765780638da5cb5b146102b05780638dd9523c146102e05780638df66e34146102f357600080fd5b80632d4634a414610131578063361c019f14610200578063481c6a751461021557806354fd4d5014610240578063715018a61461025b575b600080fd5b6101b261013f366004610e02565b60408051608080820183526000808352602080840182905283850182905260609384018290526001600160401b03958616825260038152908490208451928301855280548087168452600160401b9004909516908201526001840154928101929092526002909201549181019190915290565b6040516101f7919060006080820190506001600160401b0380845116835280602085015116602084015250604083015160408301526060830151606083015292915050565b60405180910390f35b61021361020e366004610e86565b6103ea565b005b600254610228906001600160a01b031681565b6040516001600160a01b0390911681526020016101f7565b60015b6040516001600160401b0390911681526020016101f7565b610213610522565b610213610271366004610f04565b610536565b6102a2610284366004610e02565b6001600160401b031660009081526003602052604090206002015490565b6040519081526020016101f7565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b0316610228565b6102a26102ee366004610f1d565b61054a565b600054610243906001600160401b031681565b6102a2620f424081565b61021361031e366004610fb0565b6106d3565b610213610331366004610ff1565b61070b565b610213610344366004610ff1565b61073f565b6102a260015481565b610243610360366004610e02565b6001600160401b03908116600090815260036020526040902054600160401b90041690565b6102a2610393366004610e02565b6001600160401b031660009081526003602052604090206001015490565b6102136103bf36600461101b565b610773565b6102136103d2366004610e02565b6107da565b6102136103e536600461101b565b6107eb565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b031660008115801561042f5750825b90506000826001600160401b0316600114801561044b5750303b155b905081158015610459575080155b156104775760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156104a157845460ff60401b1916600160401b1785555b6104aa8b610826565b6104b38a610837565b6104bc8961088c565b6104c5886108db565b6104cf8787610910565b831561051557845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050505050565b61052a610b2b565b6105346000610b86565b565b61053e610b2b565b610547816108db565b50565b6001600160401b038085166000908152600360205260408082208054600160401b900490931682528120600283015460018401549293928491620f424091610592919061104c565b61059c9190611069565b90506000620f4240836002015484600101546105b8919061104c565b6105c29190611069565b9050600082116106195760405162461bcd60e51b815260206004820152601a60248201527f4665654f7261636c6556313a206e6f2066656520706172616d7300000000000060448201526064015b60405180910390fd5b600081116106695760405162461bcd60e51b815260206004820152601a60248201527f4665654f7261636c6556313a206e6f2066656520706172616d730000000000006044820152606401610610565b600061067688601061104c565b9050610682828261104c565b600054849061069b908a906001600160401b031661108b565b6001600160401b03166106ae919061104c565b6001546106bb91906110b2565b6106c591906110b2565b9a9950505050505050505050565b6002546001600160a01b031633146106fd5760405162461bcd60e51b8152600401610610906110c5565b6107078282610910565b5050565b6002546001600160a01b031633146107355760405162461bcd60e51b8152600401610610906110c5565b6107078282610bf7565b6002546001600160a01b031633146107695760405162461bcd60e51b8152600401610610906110c5565b6107078282610ccc565b61077b610b2b565b6001600160a01b0381166107d15760405162461bcd60e51b815260206004820152601c60248201527f4665654f7261636c6556313a206e6f207a65726f206d616e61676572000000006044820152606401610610565b61054781610837565b6107e2610b2b565b6105478161088c565b6107f3610b2b565b6001600160a01b03811661081d57604051631e4fbdf760e01b815260006004820152602401610610565b61054781610b86565b61082e610d95565b61054781610dde565b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f60a0f5b9f9e81e98216071b85826681c796256fe3d1354ecb675580fba64fa69906020015b60405180910390a150565b6000805467ffffffffffffffff19166001600160401b0383169081179091556040519081527f6185fbe062d94552cf644f5cb643f583db7b2e7e66fdc4b4c75ff8876a257ba690602001610881565b60018190556040518181527fdb5aafdb29539329e37d4e3ee869bc4031941fd55a5dfc92824fbe34b204e30d90602001610881565b60005b81811015610b2657600083838381811061092f5761092f6110fc565b9050608002018036038101906109459190611112565b9050600081604001511161099b5760405162461bcd60e51b815260206004820152601e60248201527f4665654f7261636c6556313a206e6f207a65726f2067617320707269636500006044820152606401610610565b60008160600151116109eb5760405162461bcd60e51b81526020600482015260196024820152784665654f7261636c6556313a206e6f207a65726f207261746560381b6044820152606401610610565b80516001600160401b0316600003610a155760405162461bcd60e51b815260040161061090611191565b80602001516001600160401b0316600003610a725760405162461bcd60e51b815260206004820152601c60248201527f4665654f7261636c6556313a206e6f207a65726f20706f737473546f000000006044820152606401610610565b80516001600160401b0390811660009081526003602090815260409182902084518154838701519186166fffffffffffffffffffffffffffffffff199091168117600160401b92909616918202959095178255838601516001830181905560608088015160029094018490558551968752938601919091528484015290830152517ff378a0dd98429494eb2e26894562949c4d6e7cef5eb893b1d4c0052078d92fe59181900360800190a150600101610913565b505050565b33610b5d7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146105345760405163118cdaa760e01b8152336004820152602401610610565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b60008111610c475760405162461bcd60e51b815260206004820152601e60248201527f4665654f7261636c6556313a206e6f207a65726f2067617320707269636500006044820152606401610610565b816001600160401b0316600003610c705760405162461bcd60e51b815260040161061090611191565b6001600160401b038216600081815260036020908152604091829020600101849055815192835282018390527f3b196e45eaa29099834d3d912ac550e4f3e13fef2e2a998100368e506a44d8ff91015b60405180910390a15050565b60008111610d185760405162461bcd60e51b81526020600482015260196024820152784665654f7261636c6556313a206e6f207a65726f207261746560381b6044820152606401610610565b816001600160401b0316600003610d415760405162461bcd60e51b815260040161061090611191565b6001600160401b038216600081815260036020908152604091829020600201849055815192835282018390527f4b4594c9f06af25bc504eead96f7f0eaa3f1577f8d9b075b236520ec712e13089101610cc0565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661053457604051631afcd79f60e31b815260040160405180910390fd5b6107f3610d95565b80356001600160401b0381168114610dfd57600080fd5b919050565b600060208284031215610e1457600080fd5b610e1d82610de6565b9392505050565b80356001600160a01b0381168114610dfd57600080fd5b60008083601f840112610e4d57600080fd5b5081356001600160401b03811115610e6457600080fd5b6020830191508360208260071b8501011115610e7f57600080fd5b9250929050565b60008060008060008060a08789031215610e9f57600080fd5b610ea887610e24565b9550610eb660208801610e24565b9450610ec460408801610de6565b93506060870135925060808701356001600160401b03811115610ee657600080fd5b610ef289828a01610e3b565b979a9699509497509295939492505050565b600060208284031215610f1657600080fd5b5035919050565b60008060008060608587031215610f3357600080fd5b610f3c85610de6565b935060208501356001600160401b0380821115610f5857600080fd5b818701915087601f830112610f6c57600080fd5b813581811115610f7b57600080fd5b886020828501011115610f8d57600080fd5b602083019550809450505050610fa560408601610de6565b905092959194509250565b60008060208385031215610fc357600080fd5b82356001600160401b03811115610fd957600080fd5b610fe585828601610e3b565b90969095509350505050565b6000806040838503121561100457600080fd5b61100d83610de6565b946020939093013593505050565b60006020828403121561102d57600080fd5b610e1d82610e24565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761106357611063611036565b92915050565b60008261108657634e487b7160e01b600052601260045260246000fd5b500490565b6001600160401b038181168382160190808211156110ab576110ab611036565b5092915050565b8082018082111561106357611063611036565b60208082526018908201527f4665654f7261636c6556313a206e6f74206d616e616765720000000000000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60006080828403121561112457600080fd5b604051608081018181106001600160401b038211171561115457634e487b7160e01b600052604160045260246000fd5b60405261116083610de6565b815261116e60208401610de6565b602082015260408301356040820152606083013560608201528091505092915050565b6020808252601d908201527f4665654f7261636c6556313a206e6f207a65726f20636861696e20696400000060408201526060019056fea2646970667358221220e44aee2e8e467ae08b9968f7e69054db1b156ad71c62dbe0ad2108c880cd18a064736f6c63430008180033608060405234801561001057600080fd5b5061001961001e565b6100d0565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161561006e5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100cd5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b61104b806100df6000396000f3fe6080604052600436106100e15760003560e01c806374eeb8471161007f578063a04feb8611610059578063a04feb8614610282578063bac34036146102a2578063ed116d08146102e8578063f2fde38b1461030857600080fd5b806374eeb847146101fd5780638456cb59146102305780638da5cb5b1461024557600080fd5b80634afa17dd116100bb5780634afa17dd146101615780634e0dc4f0146101815780635c975abb146101b7578063715018a6146101e857600080fd5b806339acf9f1146100ed5780633bd9b9f61461012a5780633f4ba83a1461014c57600080fd5b366100e857005b600080fd5b3480156100f957600080fd5b5060005461010d906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561013657600080fd5b5061014a610145366004610db3565b610328565b005b34801561015857600080fd5b5061014a6105f5565b34801561016d57600080fd5b5061014a61017c366004610df4565b610607565b34801561018d57600080fd5b5061010d61019c366004610e2d565b6032602052600090815260409020546001600160a01b031681565b3480156101c357600080fd5b50600080516020610ff68339815191525460ff165b6040519015158152602001610121565b3480156101f457600080fd5b5061014a61061d565b34801561020957600080fd5b5060005461021e90600160a01b900460ff1681565b60405160ff9091168152602001610121565b34801561023c57600080fd5b5061014a61062f565b34801561025157600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031661010d565b34801561028e57600080fd5b5061014a61029d366004610e51565b61063f565b3480156102ae57600080fd5b506102da6102bd366004610ee5565b603360209081526000928352604080842090915290825290205481565b604051908152602001610121565b3480156102f457600080fd5b506101d8610303366004610df4565b6107c9565b34801561031457600080fd5b5061014a610323366004610f13565b61080f565b60005460408051631799380760e11b815281516001600160a01b0390931692632f32700e926004808401939192918290030181865afa15801561036f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103939190610f30565b8051600180546020909301516001600160a01b0316600160401b026001600160e01b03199093166001600160401b03909216919091179190911790556103d761084d565b6103df61087e565b801561040d575060015461040d906001600160401b03811690600160401b90046001600160a01b03166107c9565b61045e5760405162461bcd60e51b815260206004820152601860248201527f47617353746174696f6e3a20756e617574686f72697a6564000000000000000060448201526064015b60405180910390fd5b6001600160a01b03821660009081526033602090815260408083206001546001600160401b031684529091529020548082116104dc5760405162461bcd60e51b815260206004820152601a60248201527f47617353746174696f6e3a20616c72656164792066756e6465640000000000006044820152606401610455565b60006001600160a01b0384166104f28385610f9c565b604051600081818185875af1925050503d806000811461052e576040519150601f19603f3d011682016040523d82523d6000602084013e610533565b606091505b50509050801561056f576001600160a01b03841660009081526033602090815260408083206001546001600160401b0316845290915290208390555b6001546001600160a01b03851660008181526033602090815260408083206001600160401b0390951680845294825291829020548251888152918201528415158183015290517f4264b2d9471008d8513ddd06a5da387491ccaf43988f604f5eca833d30551c9d9181900360600190a35050600180546001600160e01b03191690555050565b6105fd610911565b61060561096c565b565b61060f610911565b61061982826109cd565b5050565b610625610911565b6106056000610ae0565b610637610911565b610605610b51565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03166000811580156106845750825b90506000826001600160401b031660011480156106a05750303b155b9050811580156106ae575080155b156106cc5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156106f657845460ff60401b1916600160401b1785555b610701896004610b9a565b61070a88610bb4565b60005b868110156107775761076f88888381811061072a5761072a610fbd565b6107409260206040909202019081019150610e2d565b89898481811061075257610752610fbd565b905060400201602001602081019061076a9190610f13565b6109cd565b60010161070d565b5083156107be57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050565b60006001600160a01b0382161580159061080657506001600160401b0383166000908152603260205260409020546001600160a01b038381169116145b90505b92915050565b610817610911565b6001600160a01b03811661084157604051631e4fbdf760e01b815260006004820152602401610455565b61084a81610ae0565b50565b600080516020610ff68339815191525460ff16156106055760405163d93c066560e01b815260040160405180910390fd5b60008060009054906101000a90046001600160a01b03166001600160a01b03166355e2448e6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f69190610fd3565b801561090c57506000546001600160a01b031633145b905090565b336109437f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146106055760405163118cdaa760e01b8152336004820152602401610455565b610974610bc5565b600080516020610ff6833981519152805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b0390911681526020015b60405180910390a150565b6001600160a01b038116610a1b5760405162461bcd60e51b815260206004820152601560248201527423b0b9a9ba30ba34b7b71d103d32b9379030b2323960591b6044820152606401610455565b816001600160401b0316600003610a745760405162461bcd60e51b815260206004820152601860248201527f47617353746174696f6e3a207a65726f20636861696e496400000000000000006044820152606401610455565b6001600160401b03821660008181526032602090815260409182902080546001600160a01b0319166001600160a01b03861690811790915591519182527f193d7693e9edcedc2357451dd62125041be2c877aa64852b126906cd438f08f5910160405180910390a25050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b610b5961084d565b600080516020610ff6833981519152805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336109ae565b610ba2610bf5565b610bab82610c3e565b61061981610cd7565b610bbc610bf5565b61084a81610d7a565b600080516020610ff68339815191525460ff1661060557604051638dfc202b60e01b815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661060557604051631afcd79f60e31b815260040160405180910390fd5b6001600160a01b038116610c895760405162461bcd60e51b8152602060048201526012602482015271584170703a206e6f207a65726f206f6d6e6960701b6044820152606401610455565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f79162c8d053a07e70cdc1ccc536f0440b571f8508377d2bef51094fadab98f47906020016109c2565b610ce081610d82565b610d2c5760405162461bcd60e51b815260206004820152601860248201527f584170703a20696e76616c696420636f6e66206c6576656c00000000000000006044820152606401610455565b6000805460ff60a01b1916600160a01b60ff8416908102919091179091556040519081527f8de08a798b4e50b4f351c1eaa91a11530043802be3ffac2df87db0c45a2e8483906020016109c2565b610817610bf5565b600060ff821660011480610809575060ff821660041492915050565b6001600160a01b038116811461084a57600080fd5b60008060408385031215610dc657600080fd5b8235610dd181610d9e565b946020939093013593505050565b6001600160401b038116811461084a57600080fd5b60008060408385031215610e0757600080fd5b8235610e1281610ddf565b91506020830135610e2281610d9e565b809150509250929050565b600060208284031215610e3f57600080fd5b8135610e4a81610ddf565b9392505050565b60008060008060608587031215610e6757600080fd5b8435610e7281610d9e565b93506020850135610e8281610d9e565b925060408501356001600160401b0380821115610e9e57600080fd5b818701915087601f830112610eb257600080fd5b813581811115610ec157600080fd5b8860208260061b8501011115610ed657600080fd5b95989497505060200194505050565b60008060408385031215610ef857600080fd5b8235610f0381610d9e565b91506020830135610e2281610ddf565b600060208284031215610f2557600080fd5b8135610e4a81610d9e565b600060408284031215610f4257600080fd5b604051604081018181106001600160401b0382111715610f7257634e487b7160e01b600052604160045260246000fd5b6040528251610f8081610ddf565b81526020830151610f9081610d9e565b60208201529392505050565b8181038181111561080957634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060208284031215610fe557600080fd5b81518015158114610e4a57600080fdfecd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300a2646970667358221220c90383f5e125df0292aaa05e40a3c882f4e981aeba8849edfae9e33b90857c3464736f6c6343000818003360a060405234801561001057600080fd5b5060405161165938038061165983398101604081905261002f916100fc565b6001600160a01b03811660805261004461004a565b5061012c565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161561009a5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100f95780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b60006020828403121561010e57600080fd5b81516001600160a01b038116811461012557600080fd5b9392505050565b608051611504610155600039600081816103a601528181610a260152610f8401526115046000f3fe6080604052600436106101095760003560e01c80638456cb5911610095578063c3de453d11610064578063c3de453d14610321578063ed56531a14610334578063f2fde38b14610354578063f3fef3a314610374578063fc0c546a1461039457600080fd5b80638456cb591461027d5780638da5cb5b146102925780638fdcb4c9146102cf578063a10ac97a146102ff57600080fd5b80633794999d116100dc5780633794999d146101db57806339acf9f1146101fb5780633f4ba83a14610233578063485cc95514610248578063715018a61461026857600080fd5b806309839a931461010e578063241b71bb1461015557806325d70f78146101855780632f4dae9f146101b9575b600080fd5b34801561011a57600080fd5b506101427f0683d1c283a672fc58eb7940a0dba83ea98b96966a9ca1b030dec2c60cea4d1e81565b6040519081526020015b60405180910390f35b34801561016157600080fd5b50610175610170366004611212565b6103c8565b604051901515815260200161014c565b34801561019157600080fd5b506101427f855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c7781565b3480156101c557600080fd5b506101d96101d4366004611212565b6103d9565b005b3480156101e757600080fd5b506101426101f6366004611240565b6103ed565b34801561020757600080fd5b5060005461021b906001600160a01b031681565b6040516001600160a01b03909116815260200161014c565b34801561023f57600080fd5b506101d9610520565b34801561025457600080fd5b506101d9610263366004611281565b610532565b34801561027457600080fd5b506101d96106b9565b34801561028957600080fd5b506101d96106cb565b34801561029e57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031661021b565b3480156102db57600080fd5b506102e66201388081565b60405167ffffffffffffffff909116815260200161014c565b34801561030b57600080fd5b506101426000805160206114af83398151915281565b6101d961032f3660046112ba565b6106db565b34801561034057600080fd5b506101d961034f366004611212565b610757565b34801561036057600080fd5b506101d961036f3660046112e6565b610768565b34801561038057600080fd5b506101d961038f3660046112ba565b6107a3565b3480156103a057600080fd5b5061021b7f000000000000000000000000000000000000000000000000000000000000000081565b60006103d382610add565b92915050565b6103e1610b5c565b6103ea81610bb7565b50565b600080546040805163110ff5f160e01b815290516001600160a01b0390921691638dd9523c91839163110ff5f1916004808201926020929091908290030181865afa158015610440573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104649190611320565b6040516001600160a01b038089166024830152871660448201526064810186905260840160408051601f198184030181529181526020820180516001600160e01b0316636ce5768960e11b179052516001600160e01b031960e085901b1681526104d79291906201388090600401611381565b602060405180830381865afa1580156104f4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051891906113b8565b949350505050565b610528610b5c565b610530610c6f565b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff166000811580156105785750825b905060008267ffffffffffffffff1660011480156105955750303b155b9050811580156105a3575080155b156105c15760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156105eb57845460ff60401b1916600160401b1785555b6001600160a01b0386166106465760405162461bcd60e51b815260206004820152601860248201527f4f6d6e694272696467653a206e6f207a65726f2061646472000000000000000060448201526064015b60405180910390fd5b61064f87610c86565b600080546001600160a01b0319166001600160a01b03881617905583156106b057845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b6106c1610b5c565b6105306000610c97565b6106d3610b5c565b610530610d08565b7f0683d1c283a672fc58eb7940a0dba83ea98b96966a9ca1b030dec2c60cea4d1e61070581610add565b156107475760405162461bcd60e51b815260206004820152601260248201527113db5b9a509c9a5919d94e881c185d5cd95960721b604482015260640161063d565b610752338484610d1f565b505050565b61075f610b5c565b6103ea81611109565b610770610b5c565b6001600160a01b03811661079a57604051631e4fbdf760e01b81526000600482015260240161063d565b6103ea81610c97565b7f855511cc3694f64379908437d6d64458dc76d02482052bfb8a5b33a72c054c776107cd81610add565b1561080f5760405162461bcd60e51b815260206004820152601260248201527113db5b9a509c9a5919d94e881c185d5cd95960721b604482015260640161063d565b6000805460408051631799380760e11b815281516001600160a01b0390931692632f32700e926004808401939192918290030181865afa158015610857573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061087b91906113d1565b6000549091506001600160a01b031633146108d05760405162461bcd60e51b815260206004820152601560248201527413db5b9a509c9a5919d94e881b9bdd081e18d85b1b605a1b604482015260640161063d565b60208101516001600160a01b0316600262048789608a1b011461092e5760405162461bcd60e51b81526020600482015260166024820152754f6d6e694272696467653a206e6f742062726964676560501b604482015260640161063d565b60008054906101000a90046001600160a01b03166001600160a01b031663110ff5f16040518163ffffffff1660e01b8152600401602060405180830381865afa15801561097f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a39190611320565b67ffffffffffffffff16816000015167ffffffffffffffff1614610a005760405162461bcd60e51b81526020600482015260146024820152734f6d6e694272696467653a206e6f74206f6d6e6960601b604482015260640161063d565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018590527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015610a6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a93919061143c565b50836001600160a01b03167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a942436484604051610acf91815260200190565b60405180910390a250505050565b6000805160206114af83398151915260009081527fff37105740f03695c8f3597f3aff2b92fbe1c80abea3c28731ecff2efd69340060208190527ffae9838a178d7f201aa98e2ce5340158edda60bb1e8f168f46503bf3e99f13be5460ff1680610b55575060008381526020829052604090205460ff165b9392505050565b33610b8e7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146105305760405163118cdaa760e01b815233600482015260240161063d565b60008181527fff37105740f03695c8f3597f3aff2b92fbe1c80abea3c28731ecff2efd693400602081905260409091205460ff16610c2e5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015260640161063d565b600082815260208290526040808220805460ff191690555183917fd05bfc2250abb0f8fd265a54c53a24359c5484af63cad2e4ce87c78ab751395a91a25050565b6105306000805160206114af833981519152610bb7565b610c8e6111c1565b6103ea8161120a565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b6105306000805160206114af833981519152611109565b60008111610d6f5760405162461bcd60e51b815260206004820152601e60248201527f4f6d6e694272696467653a20616d6f756e74206d757374206265203e20300000604482015260640161063d565b6001600160a01b038216610dc55760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e694272696467653a206e6f2062726964676520746f207a65726f000000604482015260640161063d565b60008060009054906101000a90046001600160a01b03166001600160a01b031663110ff5f16040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3d9190611320565b6040516001600160a01b038087166024830152851660448201526064810184905290915060009060840160408051601f198184030181529181526020820180516001600160e01b0316636ce5768960e11b1790526000549051632376548f60e21b81529192506001600160a01b031690638dd9523c90610ec890859085906201388090600401611381565b602060405180830381865afa158015610ee5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0991906113b8565b341015610f585760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e694272696467653a20696e73756666696369656e742066656500000000604482015260640161063d565b6040516323b872dd60e01b81526001600160a01b038681166004830152306024830152604482018590527f000000000000000000000000000000000000000000000000000000000000000016906323b872dd906064016020604051808303816000875af1158015610fcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff1919061143c565b61103d5760405162461bcd60e51b815260206004820152601b60248201527f4f6d6e694272696467653a207472616e73666572206661696c65640000000000604482015260640161063d565b60005460405163c21dda4f60e01b81526001600160a01b039091169063c21dda4f903490611083908690600490600262048789608a1b019088906201388090840161145e565b6000604051808303818588803b15801561109c57600080fd5b505af11580156110b0573d6000803e3d6000fd5b5050505050836001600160a01b0316856001600160a01b03167f59bc8a913d49a9626dd6ba5def7fcf12804061c1bb9b8b6db077e1a12cb4b422856040516110fa91815260200190565b60405180910390a35050505050565b60008181527fff37105740f03695c8f3597f3aff2b92fbe1c80abea3c28731ecff2efd693400602081905260409091205460ff161561117d5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161063d565b600082815260208290526040808220805460ff191660011790555183917f0cb09dc71d57eeec2046f6854976717e4874a3cf2d6ddeddde337e5b6de6ba3191a25050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661053057604051631afcd79f60e31b815260040160405180910390fd5b6107706111c1565b60006020828403121561122457600080fd5b5035919050565b6001600160a01b03811681146103ea57600080fd5b60008060006060848603121561125557600080fd5b83356112608161122b565b925060208401356112708161122b565b929592945050506040919091013590565b6000806040838503121561129457600080fd5b823561129f8161122b565b915060208301356112af8161122b565b809150509250929050565b600080604083850312156112cd57600080fd5b82356112d88161122b565b946020939093013593505050565b6000602082840312156112f857600080fd5b8135610b558161122b565b805167ffffffffffffffff8116811461131b57600080fd5b919050565b60006020828403121561133257600080fd5b610b5582611303565b6000815180845260005b8181101561136157602081850181015186830182015201611345565b506000602082860101526020601f19601f83011685010191505092915050565b600067ffffffffffffffff8086168352606060208401526113a5606084018661133b565b9150808416604084015250949350505050565b6000602082840312156113ca57600080fd5b5051919050565b6000604082840312156113e357600080fd5b6040516040810181811067ffffffffffffffff8211171561141457634e487b7160e01b600052604160045260246000fd5b60405261142083611303565b815260208301516114308161122b565b60208201529392505050565b60006020828403121561144e57600080fd5b81518015158114610b5557600080fd5b600067ffffffffffffffff808816835260ff8716602084015260018060a01b038616604084015260a0606084015261149960a084018661133b565b9150808416608084015250969550505050505056fe76e8952e4b09b8d505aa08998d716721a1dbf0884ac74202e33985da1ed005e9a2646970667358221220f6dcf7b2f6cea028609d1d19b031702ab0b255056d11473592225165a4dd254264736f6c634300081800336080604052600c8054600160ff199182168117909255601f8054909116909117905534801561002d57600080fd5b506157948061003d6000396000f3fe60806040523480156200001157600080fd5b5060043610620000e05760003560e01c806385226c811162000097578063b5508aa9116200006e578063b5508aa914620001a2578063ba414fa614620001ac578063e20c9f7114620001c7578063fa7626d414620001d157600080fd5b806385226c811462000166578063916a17c6146200017f578063b0464fdc146200019857600080fd5b80631ed7831c14620000e55780632ade388014620001075780633e5e3c2314620001205780633f7286f4146200012a578063522bb704146200013457806366d9a9a0146200014d575b600080fd5b620000ef620001df565b604051620000fe9190620038dc565b60405180910390f35b6200011162000243565b604051620000fe91906200397f565b620000ef62000391565b620000ef620003f3565b6200014b6200014536600462003a5b565b62000455565b005b620001576200055c565b604051620000fe919062003aca565b62000170620006d5565b604051620000fe919062003b57565b62000189620007af565b604051620000fe919062003bbf565b6200018962000899565b6200017062000983565b620001b662000a5d565b6040519015158152602001620000fe565b620000ef62000b12565b601f54620001b69060ff1681565b606060168054806020026020016040519081016040528092919081815260200182805480156200023957602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116200021a575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b828210156200038857600084815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b8282101562000370578382906000526020600020018054620002dc9062003c34565b80601f01602080910402602001604051908101604052809291908181526020018280546200030a9062003c34565b80156200035b5780601f106200032f576101008083540402835291602001916200035b565b820191906000526020600020905b8154815290600101906020018083116200033d57829003601f168201915b505050505081526020019060010190620002ba565b50505050815250508152602001906001019062000267565b50505050905090565b6060601880548060200260200160405190810160405280929190818152602001828054801562000239576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116200021a575050505050905090565b6060601780548060200260200160405190810160405280929190818152602001828054801562000239576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116200021a575050505050905090565b60006000805160206200573f83398151915260001c6001600160a01b0316634ad0bac96040518163ffffffff1660e01b81526004016060604051808303816000875af1158015620004aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004d0919062003c70565b5090915060009050816004811115620004ed57620004ed62003cc7565b146200052f5760405162461bcd60e51b815260206004820152600c60248201526b1b9bc8189c9bd85918d85cdd60a21b60448201526064015b60405180910390fd5b6200053a8262000b74565b62000544620011bc565b6200054e6200183e565b6200055862001bf9565b5050565b6060601b805480602002602001604051908101604052809291908181526020016000905b82821015620003885783829060005260206000209060020201604051806040016040529081600082018054620005b69062003c34565b80601f0160208091040260200160405190810160405280929190818152602001828054620005e49062003c34565b8015620006355780601f10620006095761010080835404028352916020019162000635565b820191906000526020600020905b8154815290600101906020018083116200061757829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015620006bc57602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116200067d5790505b5050505050815250508152602001906001019062000580565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015620003885783829060005260206000200180546200071b9062003c34565b80601f0160208091040260200160405190810160405280929190818152602001828054620007499062003c34565b80156200079a5780601f106200076e576101008083540402835291602001916200079a565b820191906000526020600020905b8154815290600101906020018083116200077c57829003601f168201915b505050505081526020019060010190620006f9565b6060601d805480602002602001604051908101604052809291908181526020016000905b82821015620003885760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156200088057602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b03191681526020019060040190602082600301049283019260010382029150808411620008415790505b50505050508152505081526020019060010190620007d3565b6060601c805480602002602001604051908101604052809291908181526020016000905b82821015620003885760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156200096a57602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116200092b5790505b50505050508152505081526020019060010190620008bd565b60606019805480602002602001604051908101604052809291908181526020016000905b8282101562000388578382906000526020600020018054620009c99062003c34565b80601f0160208091040260200160405190810160405280929190818152602001828054620009f79062003c34565b801562000a485780601f1062000a1c5761010080835404028352916020019162000a48565b820191906000526020600020905b81548152906001019060200180831162000a2a57829003601f168201915b505050505081526020019060010190620009a7565b60085460009060ff161562000a76575060085460ff1690565b604051630667f9d760e41b81526000906000805160206200571f8339815191529063667f9d709062000ac7906000805160206200573f833981519152906519985a5b195960d21b9060040162003cdd565b602060405180830381865afa15801562000ae5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b0b919062003cf6565b1415905090565b6060601580548060200260200160405190810160405280929190818152602001828054801562000239576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116200021a575050505050905090565b80601f60016101000a8154816001600160a01b0302191690836001600160a01b03160217905550601f60019054906101000a90046001600160a01b03166001600160a01b031663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000bef573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c15919062003d10565b602180546001600160a01b0319166001600160a01b03928316179055601f5460408051638da5cb5b60e01b8152905161010090920490921691638da5cb5b9160048083019260209291908290030181865afa15801562000c79573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c9f919062003d10565b602280546001600160a01b0319166001600160a01b039290921691909117905560405162000ccd9062003859565b604051809103906000f08015801562000cea573d6000803e3d6000fd5b50602080546001600160a01b0319166001600160a01b039290921691821790556040516370ca10bb60e01b81526000805160206200571f833981519152916370ca10bb9162000d429185916000919060040162003d30565b600060405180830381600087803b15801562000d5d57600080fd5b505af115801562000d72573d6000803e3d6000fd5b50506022546040516303223eab60e11b81526001600160a01b0390911660048201526000805160206200571f83398151915292506306447d569150602401600060405180830381600087803b15801562000dcb57600080fd5b505af115801562000de0573d6000803e3d6000fd5b5050601f54604080516309839a9360e01b815290516101009092046001600160a01b0316935063241b71bb925083916309839a93916004808201926020929091908290030181865afa15801562000e3b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e61919062003cf6565b6040518263ffffffff1660e01b815260040162000e8091815260200190565b602060405180830381865afa15801562000e9e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ec4919062003d51565b1562000f9b57601f54604080516309839a9360e01b815290516101009092046001600160a01b031691632f4dae9f9183916309839a93916004808201926020929091908290030181865afa15801562000f21573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000f47919062003cf6565b6040518263ffffffff1660e01b815260040162000f6691815260200190565b600060405180830381600087803b15801562000f8157600080fd5b505af115801562000f96573d6000803e3d6000fd5b505050505b601f54604080516304bae1ef60e31b815290516101009092046001600160a01b03169163241b71bb9183916325d70f78916004808201926020929091908290030181865afa15801562000ff2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001018919062003cf6565b6040518263ffffffff1660e01b81526004016200103791815260200190565b602060405180830381865afa15801562001055573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200107b919062003d51565b156200115257601f54604080516304bae1ef60e31b815290516101009092046001600160a01b031691632f4dae9f9183916325d70f78916004808201926020929091908290030181865afa158015620010d8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010fe919062003cf6565b6040518263ffffffff1660e01b81526004016200111d91815260200190565b600060405180830381600087803b1580156200113857600080fd5b505af11580156200114d573d6000803e3d6000fd5b505050505b6000805160206200573f83398151915260001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620011a057600080fd5b505af1158015620011b5573d6000803e3d6000fd5b5050505050565b6000620011e360405180604001604052806002815260200161746f60f01b81525062002033565b601f54604051633794999d60e01b815230600482018190526001600160a01b038085166024840152670de0b6b3a764000060448401819052949550909260009261010090910490911690633794999d90606401602060405180830381865afa15801562001254573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200127a919062003cf6565b602154601f546040516370a0823160e01b81526001600160a01b03610100909204821660048201529293506000929116906370a0823190602401602060405180830381865afa158015620012d2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620012f8919062003cf6565b602080546040805163110ff5f160e01b815290519394506000805160206200571f8339815191529363f30c7ba3936001600160a01b03909316928792849263110ff5f1926004808401939192918290030181865afa1580156200135f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001385919062003d75565b6040516001600160a01b03808a1660248301528b166044820152606481018a9052600490600262048789608a1b019060840160408051808303601f1901815291815260208083018051636ce5768960e11b6001600160e01b03909116179052601f548251638fdcb4c960e01b815292516101009091046001600160a01b031692638fdcb4c99260048083019391928290030181865afa1580156200142d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001453919062003d75565b6040516024016200146995949392919062003da1565b60408051601f198184030181529181526020820180516001600160e01b031663c21dda4f60e01b179052516001600160e01b031960e086901b168152620014b69392919060040162003df3565b600060405180830381600087803b158015620014d157600080fd5b505af1158015620014e6573d6000803e3d6000fd5b50506021546200150492506001600160a01b03169050848662002047565b60405163c88a5e6d60e01b81526000805160206200571f8339815191529063c88a5e6d906200153a908690869060040162003cdd565b600060405180830381600087803b1580156200155557600080fd5b505af11580156200156a573d6000803e3d6000fd5b50506040516303223eab60e11b81526001600160a01b03861660048201526000805160206200571f83398151915292506306447d569150602401600060405180830381600087803b158015620015bf57600080fd5b505af1158015620015d4573d6000803e3d6000fd5b5050602154601f5460405163095ea7b360e01b81526001600160a01b03928316945063095ea7b39350620016179261010090920490911690889060040162003cdd565b6020604051808303816000875af115801562001637573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200165d919062003d51565b50601f5460405163c3de453d60e01b81526101009091046001600160a01b03169063c3de453d90849062001698908990899060040162003cdd565b6000604051808303818588803b158015620016b257600080fd5b505af1158015620016c7573d6000803e3d6000fd5b50505050506000805160206200573f83398151915260001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200171a57600080fd5b505af11580156200172f573d6000803e3d6000fd5b5050602154601f546040516370a0823160e01b81526001600160a01b0361010090920482166004820152620017c29450911691506370a0823190602401602060405180830381865afa1580156200178a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017b0919062003cf6565b620017bc868462003e3b565b62002056565b6021546040516370a0823160e01b81526001600160a01b038581166004830152620011b59216906370a0823190602401602060405180830381865afa15801562001810573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001836919062003cf6565b600062002056565b60006200186560405180604001604052806002815260200161746f60f01b81525062002033565b602154601f546040516370a0823160e01b81526101009091046001600160a01b039081166004830152929350670de0b6b3a76400009260009216906370a0823190602401602060405180830381865afa158015620018c7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620018ed919062003cf6565b6021546040519192506000805160206200571f8339815191529163bd6af434916001600160a01b031690819063a9059cbb9062001931908990899060240162003cdd565b60408051808303601f1901815291815260208201805160e094851b6001600160e01b03909116179052519185901b6001600160e01b03191682526200197c9392509060040162003e51565b600060405180830381600087803b1580156200199757600080fd5b505af1158015620019ac573d6000803e3d6000fd5b5050602080546040805163110ff5f160e01b815290516001600160a01b0390921694506328d27d639350849263110ff5f1926004808401938290030181865afa158015620019fe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001a24919062003d75565b601f54604051600262048789608a1b019161010090046001600160a01b03169062001a56908990899060240162003cdd565b60408051601f198184030181529181526020820180516001600160e01b031663f3fef3a360e01b179052516001600160e01b031960e087901b16815262001aa99493929190620186a09060040162003e7f565b6020604051808303816000875af115801562001ac9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001aef919062003cf6565b506021546040516370a0823160e01b81526001600160a01b03858116600483015262001b6b9216906370a0823190602401602060405180830381865afa15801562001b3e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001b64919062003cf6565b8362002056565b602154601f546040516370a0823160e01b81526101009091046001600160a01b03908116600483015262001bf49216906370a0823190602401602060405180830381865afa15801562001bc2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001be8919062003cf6565b620017bc848462003ebf565b505050565b60225460405163ca669fa760e01b81526001600160a01b0390911660048201526000805160206200571f8339815191529063ca669fa790602401600060405180830381600087803b15801562001c4e57600080fd5b505af115801562001c63573d6000803e3d6000fd5b50505050601f60019054906101000a90046001600160a01b03166001600160a01b0316638456cb596040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562001cb857600080fd5b505af115801562001ccd573d6000803e3d6000fd5b5050601f54604080516309839a9360e01b8152905162001dbb94506101009092046001600160a01b0316925063241b71bb9183916309839a939160048083019260209291908290030181865afa15801562001d2c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001d52919062003cf6565b6040518263ffffffff1660e01b815260040162001d7191815260200190565b602060405180830381865afa15801562001d8f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001db5919062003d51565b620020c1565b601f54604080516304bae1ef60e31b8152905162001e159261010090046001600160a01b03169163241b71bb9183916325d70f789160048083019260209291908290030181865afa15801562001d2c573d6000803e3d6000fd5b60225460405163ca669fa760e01b81526001600160a01b0390911660048201526000805160206200571f8339815191529063ca669fa790602401600060405180830381600087803b15801562001e6a57600080fd5b505af115801562001e7f573d6000803e3d6000fd5b50505050601f60019054906101000a90046001600160a01b03166001600160a01b0316633f4ba83a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562001ed457600080fd5b505af115801562001ee9573d6000803e3d6000fd5b5050601f54604080516309839a9360e01b8152905162001fd794506101009092046001600160a01b0316925063241b71bb9183916309839a939160048083019260209291908290030181865afa15801562001f48573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f6e919062003cf6565b6040518263ffffffff1660e01b815260040162001f8d91815260200190565b602060405180830381865afa15801562001fab573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001fd1919062003d51565b6200211f565b601f54604080516304bae1ef60e31b81529051620020319261010090046001600160a01b03169163241b71bb9183916325d70f789160048083019260209291908290030181865afa15801562001f48573d6000803e3d6000fd5b565b6000620020408262002154565b5092915050565b62001bf4838383600062002269565b60405163260a5b1560e21b815260048101839052602481018290526000805160206200571f833981519152906398296c549060440160006040518083038186803b158015620020a457600080fd5b505afa158015620020b9573d6000803e3d6000fd5b505050505050565b604051630c9fd58160e01b815281151560048201526000805160206200571f83398151915290630c9fd581906024015b60006040518083038186803b1580156200210a57600080fd5b505afa158015620011b5573d6000803e3d6000fd5b60405163a598288560e01b815281151560048201526000805160206200571f8339815191529063a598288590602401620020f1565b600080826040516020016200216a919062003ed5565b60408051808303601f190181529082905280516020909101206001625e79b760e01b031982526004820181905291506000805160206200571f8339815191529063ffa1864990602401602060405180830381865afa158015620021d1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620021f7919062003d10565b6040516318caf8e360e31b81529092506000805160206200571f8339815191529063c657c7189062002230908590879060040162003e51565b600060405180830381600087803b1580156200224b57600080fd5b505af115801562002260573d6000803e3d6000fd5b50505050915091565b604080516001600160a01b0385811660248084019190915283518084039091018152604490920183526020820180516001600160e01b03166370a0823160e01b1790529151600092871691620022bf9162003ed5565b600060405180830381855afa9150503d8060008114620022fc576040519150601f19603f3d011682016040523d82523d6000602084013e62002301565b606091505b509150506000818060200190518101906200231d919062003cf6565b905062002357846200235087620023496370a0823160e01b62002342600d8d6200246e565b9062002498565b90620024b6565b90620024e2565b8215620020b95760408051600481526024810182526020810180516001600160e01b03166318160ddd60e01b17905290516000916001600160a01b03891691620023a2919062003ed5565b600060405180830381855afa9150503d8060008114620023df576040519150601f19603f3d011682016040523d82523d6000602084013e620023e4565b606091505b5091505060008180602001905181019062002400919062003cf6565b9050828610156200242b5762002417868462003ebf565b62002423908262003ebf565b905062002446565b62002437838762003ebf565b62002443908262003e3b565b90505b6200246481620023506318160ddd60e01b62002342600d8d6200246e565b5050505050505050565b6004820180546001600160a01b0319166001600160a01b0383161790556000825b90505b92915050565b60028201805463ffffffff191660e083901c1790556000826200248f565b6001808301805491820181556000908152602081206001600160a01b038416920191909155826200248f565b6200055882826004820154600283015460038401546001600160a01b039092169160e09190911b90600062002517866200293c565b6001600160a01b0385166000908152602088815260408083206001600160e01b03198816845282528083209051939450926200255891859187910162003ef3565b60408051601f198184030181529181528151602092830120835290820192909252016000206003015460ff1662002598576200259686600062002a54565b505b6001600160a01b0384166000908152602087815260408083206001600160e01b0319871684528252808320905190918391620025d991869188910162003ef3565b604051602081830303815290604052805190602001208152602001908152602001600020905060008160020154826001015462002617919062003e3b565b1115620027135760008160020154826001015462002636919062003e3b565b620026449061010062003ebf565b6200265190600262004014565b60405163348051d760e11b815260048101829052909150818810906000805160206200571f83398151915290636900a3ae90602401600060405180830381865afa158015620026a4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620026ce91908101906200406c565b604051602001620026e091906200410b565b60405160208183030381529060405290620027105760405162461bcd60e51b81526004016200052691906200418b565b50505b8054604051630667f9d760e41b81526000916000805160206200571f8339815191529163667f9d70916200274d918a919060040162003cdd565b602060405180830381865afa1580156200276b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002791919062003cf6565b6001838101546002850154929350600092908101610100039190911b60001901811b1983169089901b1783546040516370ca10bb60e01b81529192506000805160206200571f833981519152916370ca10bb91620027f7918b9190869060040162003d30565b600060405180830381600087803b1580156200281257600080fd5b505af115801562002827573d6000803e3d6000fd5b50505050600080620028398b62002a6a565b915091508115806200284b5750898114155b15620029245784546040516370ca10bb60e01b81526000805160206200571f833981519152916370ca10bb9162002889918d91899060040162003d30565b600060405180830381600087803b158015620028a457600080fd5b505af1158015620028b9573d6000803e3d6000fd5b505060405162461bcd60e51b815260206004820152603360248201527f73746453746f726167652066696e642853746453746f72616765293a204661696044820152723632b2103a37903bb934ba32903b30b63ab29760691b60648201526084019150620005269050565b6200292f8b62002b41565b5050505050505050505050565b60608160070180546200294f9062003c34565b9050600003620029b8576200249282600101805480602002602001604051908101604052809291908181526020018280548015620029ad57602002820191906000526020600020905b81548152602001906001019080831162002998575b505050505062002b4f565b816007018054620029c99062003c34565b80601f0160208091040260200160405190810160405280929190818152602001828054620029f79062003c34565b801562002a485780601f1062002a1c5761010080835404028352916020019162002a48565b820191906000526020600020905b81548152906001019060200180831162002a2a57829003601f168201915b50505050509050919050565b600062002a62838362002bef565b549392505050565b60028101546000908190819060e01b62002a84856200293c565b60405160200162002a97929190620041a0565b60408051601f1981840301815290829052600486015490925060009182916001600160a01b03169062002acc90859062003ed5565b600060405180830381855afa9150503d806000811462002b09576040519150601f19603f3d011682016040523d82523d6000602084013e62002b0e565b606091505b5091509150600062002b33828860030154602062002b2d9190620041d3565b62003359565b929792965091945050505050565b62002b4c81620033d7565b50565b606060008251602062002b639190620041d3565b67ffffffffffffffff81111562002b7e5762002b7e62004022565b6040519080825280601f01601f19166020018201604052801562002ba9576020820181803683370190505b50905060005b83518110156200204057600084828151811062002bd05762002bd0620041ed565b6020908102919091018101518382028501909101525060010162002baf565b6004820154600283015460038401546000926001600160a01b03169160e01b908362002c1b876200293c565b6001600160a01b0385166000908152602089815260408083206001600160e01b031988168452825280832090519394509262002c5c91859187910162003ef3565b60408051601f198184030181529181528151602092830120835290820192909252016000206003015460ff161562002d1057851562002ca05762002ca087620033d7565b6001600160a01b0384166000908152602088815260408083206001600160e01b0319871684528252808320905190929162002ce091859187910162003ef3565b60405160208183030381529060405280519060200120815260200190815260200160002094505050505062002492565b6000805160206200573f83398151915260001c6001600160a01b031663266cf1096040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562002d5e57600080fd5b505af115801562002d73573d6000803e3d6000fd5b50505050600062002d848862002a6a565b6040516365bc948160e01b81526001600160a01b0388166004820152909250600091506000805160206200571f833981519152906365bc9481906024016000604051808303816000875af115801562002de1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262002e0b91908101906200428c565b509050805160000362002e89576040805162461bcd60e51b81526020600482015260248101919091527f73746453746f726167652066696e642853746453746f72616765293a204e6f2060448201527f73746f726167652075736520646574656374656420666f72207461726765742e606482015260840162000526565b80515b600062002e9982620042f7565b91508110620032025760006000805160206200573f83398151915260001c6001600160a01b031663667f9d708985858151811062002edb5762002edb620041ed565b60200260200101516040518363ffffffff1660e01b815260040162002f0292919062003cdd565b602060405180830381865afa15801562002f20573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002f46919062003cf6565b90508062002fa9577f080fc4a96620c4462e705b23f346413fe3796bb63c6f8d8591baec0e231577a58884848151811062002f855762002f85620041ed565b602002602001015160001c60405162002fa092919062003cdd565b60405180910390a15b62002fd18b84848151811062002fc35762002fc3620041ed565b60200260200101516200342d565b62002fdd575062002e8c565b60068b0154600090819060ff1615620030335760006200301a8e8787815181106200300c576200300c620041ed565b602002602001015162003602565b909450925090508062003031575050505062002e8c565b505b6001828201610100031b60001901811b8316811c86811462003059575050505062002e8c565b7f9c9555b1e3102e3cf48f427d79cb678f5d9bd1ed0ad574389461e255f95170ed8b8b8a8c6040516020016200309192919062003ef3565b60405160208183030381529060405280519060200120898981518110620030bc57620030bc620041ed565b602090810291909101810151604080516001600160a01b0390961686526001600160e01b03199094169185019190915291830152606082015260800160405180910390a16040518060800160405280878781518110620031205762003120620041ed565b602002602001015160001c8152602001848152602001838152602001600115158152508e60000160008d6001600160a01b03166001600160a01b0316815260200190815260200160002060008c6001600160e01b0319166001600160e01b031916815260200190815260200160002060008a8c604051602001620031a692919062003ef3565b60408051808303601f190181529181528151602092830120835282820193909352908201600020835181559083015160018201559082015160028201556060909101516003909101805460ff1916911515919091179055505050505b506001600160a01b038616600090815260208a815260408083206001600160e01b031989168452825280832090519092916200324391879189910162003ef3565b60408051601f198184030181529181528151602092830120835290820192909252016000206003015460ff16620032d55760405162461bcd60e51b815260206004820152602f60248201527f73746453746f726167652066696e642853746453746f72616765293a20536c6f60448201526e3a143994903737ba103337bab7321760891b606482015260840162000526565b8715620032e757620032e789620033d7565b6001600160a01b038616600090815260208a815260408083206001600160e01b031989168452825280832090519092916200332791879189910162003ef3565b604051602081830303815290604052805190602001208152602001908152602001600020965050505050505092915050565b600080600060208551116200337057845162003373565b60205b905060005b81811015620033cd576200338e816008620041d3565b866200339b838862003e3b565b81518110620033ae57620033ae620041ed565b01602001516001600160f81b031916901c929092179160010162003378565b5090949350505050565b6004810180546001600160a01b031916905560028101805463ffffffff191690556200340860018201600062003867565b60006003820181905560068201805460ff1916905562002b4c90600783019062003887565b600480830154604051630667f9d760e41b815260009283926000805160206200571f8339815191529263667f9d709262003474926001600160a01b03169188910162003cdd565b602060405180830381865afa15801562003492573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620034b8919062003cf6565b9050600080620034c88662002a6a565b909250905060008115620034de576000620034e2565b6000195b6004808901546040516370ca10bb60e01b81529293506000805160206200571f833981519152926370ca10bb9262003529926001600160a01b0316918b9187910162003d30565b600060405180830381600087803b1580156200354457600080fd5b505af115801562003559573d6000803e3d6000fd5b5050505060006200356a8862002a6a565b60048a8101546040516370ca10bb60e01b81529294506000805160206200571f83398151915293506370ca10bb92620035b4926001600160a01b03909216918c918b910162003d30565b600060405180830381600087803b158015620035cf57600080fd5b505af1158015620035e4573d6000803e3d6000fd5b50505050838015620035f65750808314155b98975050505050505050565b600482810154604051630667f9d760e41b81526000928392839283926000805160206200571f8339815191529263667f9d70926200364f926001600160a01b03909216918a910162003cdd565b602060405180830381865afa1580156200366d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003693919062003cf6565b9050600080620036a68888600162003756565b91509150600080620036bb8a8a600062003756565b60048c8101546040516370ca10bb60e01b81529395509193506000805160206200571f833981519152926370ca10bb9262003707926001600160a01b03909116918e918b910162003d30565b600060405180830381600087803b1580156200372257600080fd5b505af115801562003737573d6000803e3d6000fd5b50505050838015620037465750815b9a92995097509095505050505050565b60008060005b610100811015620038485760008462003779576001821b6200378b565b620037868260ff62003ebf565b6001901b5b6004808901546040516370ca10bb60e01b81529293506000805160206200571f833981519152926370ca10bb92620037d2926001600160a01b0316918b9187910162003d30565b600060405180830381600087803b158015620037ed57600080fd5b505af115801562003802573d6000803e3d6000fd5b50505050600080620038148962002a6a565b915091508180156200382557508015155b156200383c57600184955095505050505062003851565b5050506001016200375c565b50600080915091505b935093915050565b61140d806200431283390190565b508054600082559060005260206000209081019062002b4c9190620038c1565b508054620038959062003c34565b6000825580601f10620038a6575050565b601f01602090049060005260206000209081019062002b4c91905b5b80821115620038d85760008155600101620038c2565b5090565b6020808252825182820181905260009190848201906040850190845b818110156200391f5783516001600160a01b031683529284019291840191600101620038f8565b50909695505050505050565b60005b83811015620039485781810151838201526020016200392e565b50506000910152565b600081518084526200396b8160208601602086016200392b565b601f01601f19169290920160200192915050565b602080825282518282018190526000919060409081850190600581811b8701840188860187805b8581101562003a3557603f198b8503018752825180516001600160a01b031685528901518985018990528051898601819052908a0190606081881b870181019190870190855b8181101562003a1e57605f1989850301835262003a0b84865162003951565b948e01949350918d0191600101620039ec565b505050978a019794505091880191600101620039a6565b50919a9950505050505050505050565b6001600160a01b038116811462002b4c57600080fd5b60006020828403121562003a6e57600080fd5b813562003a7b8162003a45565b9392505050565b60008151808452602080850194506020840160005b8381101562003abf5781516001600160e01b0319168752958201959082019060010162003a97565b509495945050505050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b8381101562003b4957888303603f190185528151805187855262003b1a8886018262003951565b91890151858303868b015291905062003b34818362003a82565b96890196945050509086019060010162003af3565b509098975050505050505050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101562003bb257603f1988860301845262003b9f85835162003951565b9450928501929085019060010162003b80565b5092979650505050505050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b8381101562003b4957888303603f19018552815180516001600160a01b0316845287015187840187905262003c208785018262003a82565b958801959350509086019060010162003be8565b600181811c9082168062003c4957607f821691505b60208210810362003c6a57634e487b7160e01b600052602260045260246000fd5b50919050565b60008060006060848603121562003c8657600080fd5b83516005811062003c9657600080fd5b602085015190935062003ca98162003a45565b604085015190925062003cbc8162003a45565b809150509250925092565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b03929092168252602082015260400190565b60006020828403121562003d0957600080fd5b5051919050565b60006020828403121562003d2357600080fd5b815162003a7b8162003a45565b6001600160a01b039390931683526020830191909152604082015260600190565b60006020828403121562003d6457600080fd5b8151801515811462003a7b57600080fd5b60006020828403121562003d8857600080fd5b815167ffffffffffffffff8116811462003a7b57600080fd5b600067ffffffffffffffff808816835260ff8716602084015260018060a01b038616604084015260a0606084015262003dde60a084018662003951565b91508084166080840152509695505050505050565b60018060a01b038416815282602082015260606040820152600062003e1c606083018462003951565b95945050505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111562002492576200249262003e25565b6001600160a01b038316815260406020820181905260009062003e779083018462003951565b949350505050565b67ffffffffffffffff86811682526001600160a01b0386811660208401528516604083015260a0606083018190526000919062003dde9084018662003951565b8181038181111562002492576200249262003e25565b6000825162003ee98184602087016200392b565b9190910192915050565b6000835162003f078184602088016200392b565b9190910191825250602001919050565b600181815b8085111562003f5857816000190482111562003f3c5762003f3c62003e25565b8085161562003f4a57918102915b93841c939080029062003f1c565b509250929050565b60008262003f715750600162002492565b8162003f805750600062002492565b816001811462003f99576002811462003fa45762003fc4565b600191505062002492565b60ff84111562003fb85762003fb862003e25565b50506001821b62002492565b5060208310610133831016604e8410600b841016171562003fe9575081810a62002492565b62003ff5838362003f17565b80600019048211156200400c576200400c62003e25565b029392505050565b60006200248f838362003f60565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171562004064576200406462004022565b604052919050565b6000602082840312156200407f57600080fd5b815167ffffffffffffffff808211156200409857600080fd5b818401915084601f830112620040ad57600080fd5b815181811115620040c257620040c262004022565b620040d7601f8201601f191660200162004038565b9150808252856020828501011115620040ef57600080fd5b620041028160208401602086016200392b565b50949350505050565b7f73746453746f726167652066696e642853746453746f72616765293a2050616381527f6b656420736c6f742e2057652063616e2774206669742076616c756520677265602082015269030ba32b9103a3430b7160b51b6040820152600082516200417e81604a8501602087016200392b565b91909101604a0192915050565b6020815260006200248f602083018462003951565b6001600160e01b0319831681528151600090620041c58160048501602087016200392b565b919091016004019392505050565b808202811582820484141762002492576200249262003e25565b634e487b7160e01b600052603260045260246000fd5b600082601f8301126200421557600080fd5b8151602067ffffffffffffffff82111562004234576200423462004022565b8160051b6200424582820162004038565b92835284810182019282810190878511156200426057600080fd5b83870192505b84831015620042815782518252918301919083019062004266565b979650505050505050565b60008060408385031215620042a057600080fd5b825167ffffffffffffffff80821115620042b957600080fd5b620042c78683870162004203565b93506020850151915080821115620042de57600080fd5b50620042ed8582860162004203565b9150509250929050565b60008162004309576200430962003e25565b50600019019056fe60c0604052600080546001600160a01b0319167301004e20000000000000520800000000004c4b4017905534801561003657600080fd5b506001600160401b03461660805260a660a052604051633b9aca009061005b906100a3565b908152602001604051809103906000f08015801561007d573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b03929092169190911790556100b0565b6101d08061123d83390190565b60805160a0516111616100dc60003960006101a30152600081816104450152610a5601526111616000f3fe60806040526004361061014b5760003560e01c80636739afca116100b6578063b2b2f5bd1161006f578063b2b2f5bd146104cb578063b4d5afd1146104ff578063c21dda4f14610534578063c26dfc0514610547578063cf84c81814610569578063d051c97d1461058957600080fd5b80636739afca146103ca57806378fe5307146103ec5780638dd9523c146104135780639a8a059214610433578063a32eb7c614610467578063aaf1bc971461049b57600080fd5b80632f32700e116101085780632f32700e1461026b5780633aa87330146102d05780633fd3b15e14610311578063500b19e71461035257806355e2448e1461038a57806366a1eaf3146103aa57600080fd5b80630360d20f1461015057806306c3dc5f1461017c578063110ff5f11461019157806324278bbe146101dd57806328d27d631461021d5780632cc3d3541461024b575b600080fd5b34801561015c57600080fd5b50610165600281565b60405160ff90911681526020015b60405180910390f35b34801561018857600080fd5b50610165600381565b34801561019d57600080fd5b506101c57f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160401b039091168152602001610173565b3480156101e957600080fd5b5061020d6101f8366004610ccb565b60066020526000908152604090205460ff1681565b6040519015158152602001610173565b34801561022957600080fd5b5061023d610238366004610d4c565b6105ca565b604051908152602001610173565b34801561025757600080fd5b5061023d610266366004610dd0565b6107e2565b34801561027757600080fd5b506040805180820182526000808252602091820152815180830183526007546001600160401b0381168083526001600160a01b03600160401b909204821692840192835284519081529151169181019190915201610173565b3480156102dc57600080fd5b506101c56102eb366004610e45565b60026020908152600092835260408084209091529082529020546001600160401b031681565b34801561031d57600080fd5b506101c561032c366004610e45565b60046020908152600092835260408084209091529082529020546001600160401b031681565b34801561035e57600080fd5b50600154610372906001600160a01b031681565b6040516001600160a01b039091168152602001610173565b34801561039657600080fd5b506007546001600160401b0316151561020d565b3480156103b657600080fd5b506103c86103c5366004610e78565b50565b005b3480156103d657600080fd5b506103df6108c8565b6040516101739190610eb3565b3480156103f857600080fd5b506000546101c590600160401b90046001600160401b031681565b34801561041f57600080fd5b5061023d61042e366004610f64565b61090e565b34801561043f57600080fd5b506101c57f000000000000000000000000000000000000000000000000000000000000000081565b34801561047357600080fd5b5061023d7ffeccba1cfc4544bf9cd83b76f36ae5c464750b6c43f682e26744ee21ec31fc1e81565b3480156104a757600080fd5b5061020d6104b6366004610ccb565b60056020526000908152604090205460ff1681565b3480156104d757600080fd5b5061023d7fa06a0c1264badca141841b5f52470407dac9adaaa539dd445540986341b73a6881565b34801561050b57600080fd5b5060005461052190600160801b900461ffff1681565b60405161ffff9091168152602001610173565b6103c8610542366004610fc8565b61098f565b34801561055357600080fd5b5060005461052190600160901b900461ffff1681565b34801561057557600080fd5b506000546101c5906001600160401b031681565b34801561059557600080fd5b506101c56105a4366004610e45565b60036020908152600092835260408084209091529082529020546001600160401b031681565b600080546001600160401b03908116908316111561062f5760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e69506f7274616c3a206761734c696d697420746f6f206869676800000060448201526064015b60405180910390fd5b6000546001600160401b03600160401b909104811690831610156106955760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a206761734c696d697420746f6f206c6f77000000006044820152606401610626565b604080518082019091526001600160401b0388168082526001600160a01b0388166020909201829052600780546001600160e01b031916909117600160401b9092029190911790555a9050600080866001600160a01b0316846001600160401b03168787604051610707929190611000565b60006040518083038160008787f1925050503d8060008114610745576040519150601f19603f3d011682016040523d82523d6000602084013e61074a565b606091505b50915091505a61075a9084611026565b600780546001600160e01b03191690559250811580156107835750836001600160401b03168310155b156107c95760405162461bcd60e51b81526020600482015260166024820152754d6f636b506f7274616c3a206f7574206f662067617360501b6044820152606401610626565b816107d657805160208201fd5b50509695505050505050565b604080518082019091526001600160401b0386168082526001600160a01b0386166020909201829052600780546001600160e01b031916909117600160401b90920291909117905560005a9050600080856001600160a01b0316858560405161084c929190611000565b6000604051808303816000865af19150503d8060008114610889576040519150601f19603f3d011682016040523d82523d6000602084013e61088e565b606091505b50915091505a61089e9084611026565b600780546001600160e01b03191690559250816108bd57805160208201fd5b505095945050505050565b60408051600080825260208201909252606091610908565b6040805180820190915260008152606060208201528152602001906001900390816108e05790505b50905090565b600154604051632376548f60e21b81526000916001600160a01b031690638dd9523c90610945908890889088908890600401611068565b602060405180830381865afa158015610962573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061098691906110a0565b95945050505050565b6000546001600160401b0390811690821611156109ee5760405162461bcd60e51b815260206004820152601d60248201527f4f6d6e69506f7274616c3a206761734c696d697420746f6f20686967680000006044820152606401610626565b6000546001600160401b03600160401b90910481169082161015610a545760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a206761734c696d697420746f6f206c6f77000000006044820152606401610626565b7f00000000000000000000000000000000000000000000000000000000000000006001600160401b0316866001600160401b031603610ad55760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a20756e737570706f727465642064657374000000006044820152606401610626565b6001600160401b038616610b2b5760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a20756e737570706f727465642064657374000000006044820152606401610626565b6001600160a01b038416610b815760405162461bcd60e51b815260206004820152601b60248201527f4f6d6e69506f7274616c3a206e6f20706f7274616c207863616c6c00000000006044820152606401610626565b6000610b8f8785858561090e565b905080341015610be15760405162461bcd60e51b815260206004820152601c60248201527f4f6d6e69506f7274616c3a20696e73756666696369656e7420666565000000006044820152606401610626565b6001600160401b03808816600090815260026020908152604080832060ff8b1680855292528220805491936001939192610c1d918591166110b9565b82546101009290920a6001600160401b0381810219909316918316021790915589811660008181526002602090815260408083208786168085529252918290205491519190931693507fb7c8eb9d7a7fbcdab809ab7b8a7c41701eb3115e3fe99d30ff490d8552f72bfa90610c9d9033908c908c908c908c908c906110e0565b60405180910390a45050505050505050565b80356001600160401b0381168114610cc657600080fd5b919050565b600060208284031215610cdd57600080fd5b610ce682610caf565b9392505050565b80356001600160a01b0381168114610cc657600080fd5b60008083601f840112610d1657600080fd5b5081356001600160401b03811115610d2d57600080fd5b602083019150836020828501011115610d4557600080fd5b9250929050565b60008060008060008060a08789031215610d6557600080fd5b610d6e87610caf565b9550610d7c60208801610ced565b9450610d8a60408801610ced565b935060608701356001600160401b03811115610da557600080fd5b610db189828a01610d04565b9094509250610dc4905060808801610caf565b90509295509295509295565b600080600080600060808688031215610de857600080fd5b610df186610caf565b9450610dff60208701610ced565b9350610e0d60408701610ced565b925060608601356001600160401b03811115610e2857600080fd5b610e3488828901610d04565b969995985093965092949392505050565b60008060408385031215610e5857600080fd5b610e6183610caf565b9150610e6f60208401610caf565b90509250929050565b600060208284031215610e8a57600080fd5b81356001600160401b03811115610ea057600080fd5b82016101808185031215610ce657600080fd5b600060208083018184528085518083526040925060408601915060408160051b8701018488016000805b84811015610f5557898403603f19018652825180516001600160401b039081168652908901518986018990528051898701819052908a0191849160608801905b80841015610f3f57845183168252938c019360019390930192908c0190610f1d565b50988b0198965050509288019250600101610edd565b50919998505050505050505050565b60008060008060608587031215610f7a57600080fd5b610f8385610caf565b935060208501356001600160401b03811115610f9e57600080fd5b610faa87828801610d04565b9094509250610fbd905060408601610caf565b905092959194509250565b60008060008060008060a08789031215610fe157600080fd5b610fea87610caf565b9550602087013560ff81168114610d7c57600080fd5b8183823760009101908152919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561103957611039611010565b92915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60006001600160401b0380871683526060602084015261108c60608401868861103f565b915080841660408401525095945050505050565b6000602082840312156110b257600080fd5b5051919050565b6001600160401b038181168382160190808211156110d9576110d9611010565b5092915050565b6001600160a01b0387811682528616602082015260a06040820181905260009061110d908301868861103f565b6001600160401b03949094166060830152506080015294935050505056fea2646970667358221220fd7b887f78d4d6f8b128aeff3bca8f522590cf1ade5c373d54b1d4a974105a0564736f6c63430008180033608060405234801561001057600080fd5b506040516101d03803806101d083398101604081905261002f91610037565b600055610050565b60006020828403121561004957600080fd5b5051919050565b6101718061005f6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806354fd4d50146100465780638dd9523c1461005a578063ddca3f4314610081575b600080fd5b604051600181526020015b60405180910390f35b6100736100683660046100a7565b600054949350505050565b604051908152602001610051565b61007360005481565b803567ffffffffffffffff811681146100a257600080fd5b919050565b600080600080606085870312156100bd57600080fd5b6100c68561008a565b9350602085013567ffffffffffffffff808211156100e357600080fd5b818701915087601f8301126100f757600080fd5b81358181111561010657600080fd5b88602082850101111561011857600080fd5b6020830195508094505050506101306040860161008a565b90509295919450925056fea2646970667358221220590210d19b70b700525ca08edfb5f66d40cc1e65dbe3999c4a70b839b2075d9464736f6c634300081800330000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12d885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12da26469706673582212206547cfbbc99bd5505ad78fbb418888f4c51526e02c782085a2f3264d03e8d0cd64736f6c634300081800330000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12d885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12da2646970667358221220e9db44f9951f5dff76c3fbafeac90b61a78985d99b0905c5065457e50b5981f064736f6c63430008180033", } // AdminABI is the input ABI used to generate the binding from. diff --git a/contracts/bindings/allocpredeploys.go b/contracts/bindings/allocpredeploys.go index 65ef49b59..40bb3f1c0 100644 --- a/contracts/bindings/allocpredeploys.go +++ b/contracts/bindings/allocpredeploys.go @@ -42,7 +42,7 @@ type AllocPredeploysConfig struct { // AllocPredeploysMetaData contains all meta data concerning the AllocPredeploys contract. var AllocPredeploysMetaData = &bind.MetaData{ ABI: "[{\"type\":\"function\",\"name\":\"IS_SCRIPT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"run\",\"inputs\":[{\"name\":\"config\",\"type\":\"tuple\",\"internalType\":\"structAllocPredeploys.Config\",\"components\":[{\"name\":\"manager\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"upgrader\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"nativeBridgeBalance\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"enableStakingAllowlist\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"output\",\"type\":\"string\",\"internalType\":\"string\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"runNoStateDump\",\"inputs\":[{\"name\":\"config\",\"type\":\"tuple\",\"internalType\":\"structAllocPredeploys.Config\",\"components\":[{\"name\":\"manager\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"upgrader\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"nativeBridgeBalance\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"enableStakingAllowlist\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"output\",\"type\":\"string\",\"internalType\":\"string\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"}]", - Bin: "0x6080604052600c80546201000162ff00ff19909116179055601380546001600160a01b03191673dddddddddddddddddddddddddddddddddddddddd17905534801561004957600080fd5b506202083c806200005b6000396000f3fe60806040523480156200001157600080fd5b5060043610620000465760003560e01c8063bcf30fd8146200004b578063f0b4cd311462000064578063f8ccbf47146200007b575b600080fd5b620000626200005c3660046200286a565b620000a3565b005b62000062620000753660046200286a565b620000b1565b600c546200008f9062010000900460ff1681565b604051901515815260200160405180910390f35b620000ae8162000259565b50565b620000bc8162000259565b604051635a6b63c160e11b815260008051602062003c9a8339815191529063b4d6c78290620000f0903390600401620028af565b600060405180830381600087803b1580156200010b57600080fd5b505af115801562000120573d6000803e3d6000fd5b5050604051631c72346d60e01b815233600482015260008051602062003c9a8339815191529250631c72346d9150602401600060405180830381600087803b1580156200016c57600080fd5b505af115801562000181573d6000803e3d6000fd5b505060405163c88a5e6d60e01b81523360048201526000602482015260008051602062003c9a833981519152925063c88a5e6d9150604401600060405180830381600087803b158015620001d457600080fd5b505af1158015620001e9573d6000803e3d6000fd5b505060405163709ecd3f60e01b815260008051602062003c9a833981519152925063709ecd3f915062000222906012906004016200290e565b600060405180830381600087803b1580156200023d57600080fd5b505af115801562000252573d6000803e3d6000fd5b5050505050565b80600d62000268828262002b14565b5050600f54604051632024eee960e11b8152600481019190915260008051602062003c9a83398151915290634049ddd290602401600060405180830381600087803b158015620002b757600080fd5b505af1158015620002cc573d6000803e3d6000fd5b50506013546040516303223eab60e11b81526001600160a01b03909116600482015260008051602062003c9a83398151915292506306447d569150602401600060405180830381600087803b1580156200032557600080fd5b505af11580156200033a573d6000803e3d6000fd5b5050505062000348620003a0565b62000352620003e8565b6000805160206200e6ac83398151915260001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200023d57600080fd5b620003aa62001684565b620003b4620016d3565b620003be6200183b565b620003c862001a1c565b620003d262001ae3565b620003dc62001c44565b620003e662001d21565b565b6000805160206200e6ac83398151915260001c6001600160a01b031663b4d6c78273ca11bde05977b3631167028862be2a173976ca1160405180610f000160405280610ee081526020016201ef01610ee091396040518363ffffffff1660e01b81526004016200045a92919062002c04565b600060405180830381600087803b1580156200047557600080fd5b505af11580156200048a573d6000803e3d6000fd5b505050506000805160206200e6ac83398151915260001c6001600160a01b031663b4d6c7827313b0d85ccb8bf860b6b79af3029fca081ae9bef260405180610660016040528061063081526020016200e07c61063091396040518363ffffffff1660e01b81526004016200050092919062002c04565b600060405180830381600087803b1580156200051b57600080fd5b505af115801562000530573d6000803e3d6000fd5b505050506000805160206200e6ac83398151915260001c6001600160a01b031663b4d6c78273ba5ed099633d3b313e4d5f7bdc1305d3c28ba5ed60405180612e600160405280612e3e81526020016201407a612e3e91396040518363ffffffff1660e01b8152600401620005a692919062002c04565b600060405180830381600087803b158015620005c157600080fd5b505af1158015620005d6573d6000803e3d6000fd5b505050506000805160206200e6ac83398151915260001c6001600160a01b031663b4d6c7827369f4d1788e39c87893c980c06edf4b7f686e2938604051806159e001604052806159ae81526020016200e6cc6159ae91396040518363ffffffff1660e01b81526004016200064c92919062002c04565b600060405180830381600087803b1580156200066757600080fd5b505af11580156200067c573d6000803e3d6000fd5b505050506000805160206200e6ac83398151915260001c6001600160a01b031663b4d6c78273fb1bffc9d739b8d520daf37df666da4c687191ea60405180615d200160405280615cf8815260200162003cba615cf891396040518363ffffffff1660e01b8152600401620006f292919062002c04565b600060405180830381600087803b1580156200070d57600080fd5b505af115801562000722573d6000803e3d6000fd5b505050506000805160206200e6ac83398151915260001c6001600160a01b031663b4d6c78273a1dabef33b3b82c7814b6d82a79e50f4ac44102b604051806101c0016040528061019a81526020016200dcd261019a91396040518363ffffffff1660e01b81526004016200079892919062002c04565b600060405180830381600087803b158015620007b357600080fd5b505af1158015620007c8573d6000803e3d6000fd5b505050506000805160206200e6ac83398151915260001c6001600160a01b031663b4d6c78273914d7fec6aac8cd542e72bca78b30650d45643d760405180608001604052806045815260200162009b75604591396040518363ffffffff1660e01b81526004016200083b92919062002c04565b600060405180830381600087803b1580156200085657600080fd5b505af11580156200086b573d6000803e3d6000fd5b505050506000805160206200e6ac83398151915260001c6001600160a01b031663b4d6c782734e59b44847b379578588920ca78fbf26c0b4956c60405180608001604052806045815260200162009b75604591396040518363ffffffff1660e01b8152600401620008de92919062002c04565b600060405180830381600087803b158015620008f957600080fd5b505af11580156200090e573d6000803e3d6000fd5b505050506000805160206200e6ac83398151915260001c6001600160a01b031663b4d6c78273998739bfdaadde7c933b942a68053933098f9eda604051806102a00160405280610275815260200162009bba61027591396040518363ffffffff1660e01b81526004016200098492919062002c04565b600060405180830381600087803b1580156200099f57600080fd5b505af1158015620009b4573d6000803e3d6000fd5b5050600f5460008051602062003c9a833981519152925063b4d6c78291506e22d473030f116ddee9f6b43ac78ba390620009ee9062001e75565b6040518363ffffffff1660e01b815260040162000a0d92919062002c04565b600060405180830381600087803b15801562000a2857600080fd5b505af115801562000a3d573d6000803e3d6000fd5b505050506000805160206200e6ac83398151915260001c6001600160a01b031663b4d6c782737fc98430eaedbb6070b35b39d79872504908834860405180610240016040528061021081526020016200de6c61021091396040518363ffffffff1660e01b815260040162000ab392919062002c04565b600060405180830381600087803b15801562000ace57600080fd5b505af115801562000ae3573d6000803e3d6000fd5b505050506000805160206200e6ac83398151915260001c6001600160a01b031663b4d6c782735ff137d4b0fdcd49dca30c7cf57e578a026d278960405180615cc00160405280615c89815260200162019278615c8991396040518363ffffffff1660e01b815260040162000b5992919062002c04565b600060405180830381600087803b15801562000b7457600080fd5b505af115801562000b89573d6000803e3d6000fd5b505050506000805160206200e6ac83398151915260001c6001600160a01b031663b4d6c78273efc2c1444ebcc4db75e7613d20c6a62ff67a167c6040518061020001604052806101c38152602001620099b26101c391396040518363ffffffff1660e01b815260040162000bff92919062002c04565b600060405180830381600087803b15801562000c1a57600080fd5b505af115801562000c2f573d6000803e3d6000fd5b505050506000805160206200e6ac83398151915260001c6001600160a01b031663b4d6c7826f71727de22e5e9d8baf0edac6f37da03260405180613ee00160405280613ea3815260200162009e2f613ea391396040518363ffffffff1660e01b815260040162000ca192919062002c04565b600060405180830381600087803b15801562000cbc57600080fd5b505af115801562000cd1573d6000803e3d6000fd5b505050506000805160206200e6ac83398151915260001c6001600160a01b031663b4d6c782731820a4b7618bde71dce8cdc73aab6c95905fad2460405180610a0001604052806109c581526020016201fde16109c591396040518363ffffffff1660e01b815260040162000d4792919062002c04565b600060405180830381600087803b15801562000d6257600080fd5b505af115801562000d77573d6000803e3d6000fd5b505050506000805160206200e6ac83398151915260001c6001600160a01b031663b4d6c782720f3df6d732807ef1319fb7b8bb8522d0beac026040518060a0016040528060618152602001620207a6606191396040518363ffffffff1660e01b815260040162000de992919062002c04565b600060405180830381600087803b15801562000e0457600080fd5b505af115801562000e19573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003c9a833981519152925063f8e18b57915062000e6890730b799c86a49deeb90402691f1041aa3af2d3c8759060019060040162002c48565b600060405180830381600087803b15801562000e8357600080fd5b505af115801562000e98573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003c9a833981519152925063f8e18b57915062000ee79073ca11bde05977b3631167028862be2a173976ca119060019060040162002c48565b600060405180830381600087803b15801562000f0257600080fd5b505af115801562000f17573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003c9a833981519152925063f8e18b57915062000f66907313b0d85ccb8bf860b6b79af3029fca081ae9bef29060019060040162002c48565b600060405180830381600087803b15801562000f8157600080fd5b505af115801562000f96573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003c9a833981519152925063f8e18b57915062000fe59073ba5ed099633d3b313e4d5f7bdc1305d3c28ba5ed9060019060040162002c48565b600060405180830381600087803b1580156200100057600080fd5b505af115801562001015573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003c9a833981519152925063f8e18b57915062001064907369f4d1788e39c87893c980c06edf4b7f686e29389060019060040162002c48565b600060405180830381600087803b1580156200107f57600080fd5b505af115801562001094573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003c9a833981519152925063f8e18b579150620010e39073fb1bffc9d739b8d520daf37df666da4c687191ea9060019060040162002c48565b600060405180830381600087803b158015620010fe57600080fd5b505af115801562001113573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003c9a833981519152925063f8e18b579150620011629073a1dabef33b3b82c7814b6d82a79e50f4ac44102b9060019060040162002c48565b600060405180830381600087803b1580156200117d57600080fd5b505af115801562001192573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003c9a833981519152925063f8e18b579150620011e19073914d7fec6aac8cd542e72bca78b30650d45643d79060019060040162002c48565b600060405180830381600087803b158015620011fc57600080fd5b505af115801562001211573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003c9a833981519152925063f8e18b5791506200126090734e59b44847b379578588920ca78fbf26c0b4956c9060019060040162002c48565b600060405180830381600087803b1580156200127b57600080fd5b505af115801562001290573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003c9a833981519152925063f8e18b579150620012df9073998739bfdaadde7c933b942a68053933098f9eda9060019060040162002c48565b600060405180830381600087803b158015620012fa57600080fd5b505af11580156200130f573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003c9a833981519152925063f8e18b57915062001359906e22d473030f116ddee9f6b43ac78ba39060019060040162002c48565b600060405180830381600087803b1580156200137457600080fd5b505af115801562001389573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003c9a833981519152925063f8e18b579150620013d890737fc98430eaedbb6070b35b39d7987250490883489060019060040162002c48565b600060405180830381600087803b158015620013f357600080fd5b505af115801562001408573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003c9a833981519152925063f8e18b5791506200145790735ff137d4b0fdcd49dca30c7cf57e578a026d27899060019060040162002c48565b600060405180830381600087803b1580156200147257600080fd5b505af115801562001487573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003c9a833981519152925063f8e18b579150620014d69073efc2c1444ebcc4db75e7613d20c6a62ff67a167c9060019060040162002c48565b600060405180830381600087803b158015620014f157600080fd5b505af115801562001506573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003c9a833981519152925063f8e18b57915062001551906f71727de22e5e9d8baf0edac6f37da0329060019060040162002c48565b600060405180830381600087803b1580156200156c57600080fd5b505af115801562001581573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003c9a833981519152925063f8e18b579150620015d090731820a4b7618bde71dce8cdc73aab6c95905fad249060019060040162002c48565b600060405180830381600087803b158015620015eb57600080fd5b505af115801562001600573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003c9a833981519152925063f8e18b5791506200164e90720f3df6d732807ef1319fb7b8bb8522d0beac029060019060040162002c48565b600060405180830381600087803b1580156200166957600080fd5b505af11580156200167e573d6000803e3d6000fd5b50505050565b60006200169062001fab565b905060005b8151811015620016cf57620016c6828281518110620016b857620016b862002c6b565b602002602001015162002048565b60010162001695565b5050565b6000620016e9600162048789608a1b0162002484565b604051630fafdced60e21b815260206004820152602160248201527f506f7274616c52656769737472792e736f6c3a506f7274616c526567697374726044820152607960f81b606482015290915060008051602062003c9a8339815191529063b4d6c7829083908390633ebf73b490608401600060405180830381865afa15801562001779573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620017a3919081019062002c81565b6040518363ffffffff1660e01b8152600401620017c292919062002c04565b600060405180830381600087803b158015620017dd57600080fd5b505af1158015620017f2573d6000803e3d6000fd5b5050505062001801816200255b565b600e5460405163189acdbd60e31b81526001600160a01b039091166004820152600162048789608a1b019063c4d66de89060240162000222565b60105460405163c88a5e6d60e01b8152600262048789608a1b016004820152602481019190915260008051602062003c9a8339815191529063c88a5e6d90604401600060405180830381600087803b1580156200189757600080fd5b505af1158015620018ac573d6000803e3d6000fd5b505050506000620018c6600262048789608a1b0162002484565b604051630fafdced60e21b815260206004820152602560248201527f4f6d6e694272696467654e61746976652e736f6c3a4f6d6e694272696467654e604482015264617469766560d81b606482015290915060008051602062003c9a8339815191529063b4d6c7829083908390633ebf73b490608401600060405180830381865afa1580156200195a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001984919081019062002c81565b6040518363ffffffff1660e01b8152600401620019a392919062002c04565b600060405180830381600087803b158015620019be57600080fd5b505af1158015620019d3573d6000803e3d6000fd5b50505050620019e2816200255b565b600d5460405163189acdbd60e31b81526001600160a01b039091166004820152600262048789608a1b019063c4d66de89060240162000222565b604051630fafdced60e21b815260206004820152600f60248201526e574f6d6e692e736f6c3a574f6d6e6960881b604482015260008051602062003c9a8339815191529063b4d6c78290600362048789608a1b01908390633ebf73b490606401600060405180830381865afa15801562001a9a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001ac4919081019062002c81565b6040518363ffffffff1660e01b81526004016200164e92919062002c04565b600062001af9600162333333608a1b0162002484565b604051630fafdced60e21b81526020600482015260136024820152725374616b696e672e736f6c3a5374616b696e6760681b604482015290915060008051602062003c9a8339815191529063b4d6c7829083908390633ebf73b490606401600060405180830381865afa15801562001b75573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001b9f919081019062002c81565b6040518363ffffffff1660e01b815260040162001bbe92919062002c04565b600060405180830381600087803b15801562001bd957600080fd5b505af115801562001bee573d6000803e3d6000fd5b5050505062001bfd816200255b565b600d5460115460405163400ada7560e01b81526001600160a01b03909216600483015260ff1615156024820152600162333333608a1b019063400ada759060440162000222565b600062001c5a600262333333608a1b0162002484565b604051630fafdced60e21b8152602060048201526015602482015274536c617368696e672e736f6c3a536c617368696e6760581b604482015290915060008051602062003c9a8339815191529063b4d6c7829083908390633ebf73b490606401600060405180830381865afa15801562001cd8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001d02919081019062002c81565b6040518363ffffffff1660e01b81526004016200022292919062002c04565b600062001d37600362333333608a1b0162002484565b604051630fafdced60e21b8152602060048201526013602482015272557067726164652e736f6c3a5570677261646560681b604482015290915060008051602062003c9a8339815191529063b4d6c7829083908390633ebf73b490606401600060405180830381865afa15801562001db3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001ddd919081019062002c81565b6040518363ffffffff1660e01b815260040162001dfc92919062002c04565b600060405180830381600087803b15801562001e1757600080fd5b505af115801562001e2c573d6000803e3d6000fd5b5050505062001e3b816200255b565b600e5460405163189acdbd60e31b81526001600160a01b039091166004820152600362333333608a1b019063c4d66de89060240162000222565b6060600060405160200162001e9790662832b936b4ba1960c91b815260070190565b604051602081830303815290604052805190602001209050600060405160200162001f17907f454950373132446f6d61696e28737472696e67206e616d652c75696e7432353681527f20636861696e49642c6164647265737320766572696679696e67436f6e74726160208201526263742960e81b604082015260430190565b60408051601f198184030181528282528051602091820120908301819052908201849052606082018690526e22d473030f116ddee9f6b43ac78ba36080830152915060009060a001604051602081830303815290604052805190602001209050604051806123e001604052806123c0815260200162016eb86123c09139611b41810195909552611b67850152509192915050565b604080516002808252606080830184529260208301908036833701905050905062048789608a1b8160008151811062001fe85762001fe862002c6b565b60200260200101906001600160a01b031690816001600160a01b03168152505062333333608a1b8160018151811062002025576200202562002c6b565b60200260200101906001600160a01b031690816001600160a01b03168152505090565b63ffffffff811615620020965760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964206e616d65737061636560781b60448201526064015b60405180910390fd5b60015b610400816001600160a01b0316116200244e576000620020ba828462002d50565b9050600362048789608a1b016001600160a01b03821603620020dd575062002439565b6000620020ea82620025cb565b620020f757600062002102565b620021028262002484565b90506001600160a01b0381163b15620021515760405162461bcd60e51b815260206004820152601060248201526f1a5b5c1b08185b1c9958591e481cd95d60821b60448201526064016200208d565b60408051635a6b63c160e11b81526001600160a01b038316600482015260248101919091526002604482015261030360f41b606482015260008051602062003c9a8339815191529063b4d6c78290608401600060405180830381600087803b158015620021bd57600080fd5b505af1158015620021d2573d6000803e3d6000fd5b5050600e54604051600093508492506001600160a01b0390911690620021f8906200285c565b6001600160a01b03928316815291166020820152606060408201819052600090820152608001604051809103906000f0801580156200223b573d6000803e3d6000fd5b5090506000805160206200e6ac83398151915260001c6001600160a01b031663b4d6c78284836001600160a01b0316803b806020016040519081016040528181526000908060200190933c6040518363ffffffff1660e01b8152600401620022a592919062002c04565b600060405180830381600087803b158015620022c057600080fd5b505af1158015620022d5573d6000803e3d6000fd5b50505050620022e5838362002678565b620022fb83620022f58362002715565b620027b8565b604051635a6b63c160e11b815260008051602062003c9a8339815191529063b4d6c782906200232f908590600401620028af565b600060405180830381600087803b1580156200234a57600080fd5b505af11580156200235f573d6000803e3d6000fd5b5050604051635a6b63c160e11b815260008051602062003c9a833981519152925063b4d6c782915062002397908490600401620028af565b600060405180830381600087803b158015620023b257600080fd5b505af1158015620023c7573d6000803e3d6000fd5b5050604051631c72346d60e01b81526001600160a01b038416600482015260008051602062003c9a8339815191529250631c72346d9150602401600060405180830381600087803b1580156200241c57600080fd5b505af115801562002431573d6000803e3d6000fd5b505050505050505b80620024458162002d7a565b91505062002099565b50604051635a6b63c160e11b815260008051602062003c9a8339815191529063b4d6c782906200022290600090600401620028af565b6000620024918262002822565b620024df5760405162461bcd60e51b815260206004820152601b60248201527f5072656465706c6f79733a206e6f742061207072656465706c6f79000000000060448201526064016200208d565b600362048789608a1b016001600160a01b03831603620025425760405162461bcd60e51b815260206004820152601760248201527f5072656465706c6f79733a206e6f742070726f7869656400000000000000000060448201526064016200208d565b62002555826001600160a01b0362002dab565b92915050565b6040516370ca10bb60e01b81526001600160a01b03821660048201527ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00602482015267ffffffffffffffff604482015260008051602062003c9a833981519152906370ca10bb9060640162000222565b60006001600160a01b038216600162048789608a1b011480620025ff57506001600160a01b038216600262048789608a1b01145b806200261c57506001600160a01b038216600362048789608a1b01145b806200263957506001600160a01b038216600162333333608a1b01145b806200265657506001600160a01b038216600262333333608a1b01145b806200255557506001600160a01b038216600362333333608a1b011492915050565b6040516370ca10bb60e01b81526001600160a01b0380841660048301527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60248301528216604482015260008051602062003c9a833981519152906370ca10bb906064015b600060405180830381600087803b158015620026f857600080fd5b505af11580156200270d573d6000803e3d6000fd5b505050505050565b604051630667f9d760e41b81526001600160a01b03821660048201527fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103602482015260009060008051602062003c9a8339815191529063667f9d7090604401602060405180830381865afa15801562002792573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002555919062002dce565b6040516370ca10bb60e01b81526001600160a01b0380841660048301527fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610360248301528216604482015260008051602062003c9a833981519152906370ca10bb90606401620026dd565b60006001600160961b03600a83901c166204878960801b1480620025555750506233333360801b600a9190911c6001600160961b03161490565b610eb18062002de983390190565b6000602082840312156200287d57600080fd5b813567ffffffffffffffff8111156200289557600080fd5b820160c08185031215620028a857600080fd5b9392505050565b6001600160a01b0391909116815260406020820181905260009082015260600190565b600181811c90821680620028e757607f821691505b6020821081036200290857634e487b7160e01b600052602260045260246000fd5b50919050565b60006020808352600084546200292481620028d2565b8060208701526040600180841660008114620029495760018114620029665762002998565b60ff19851660408a0152604084151560051b8a0101955062002998565b89600052602060002060005b858110156200298f5781548b820186015290830190880162002972565b8a016040019650505b509398975050505050505050565b600081356001600160a01b03811681146200255557600080fd5b80546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b601f82111562002a42576000816000526020600020601f850160051c8101602086101562002a215750805b601f850160051c820191505b818110156200270d5782815560010162002a2d565b505050565b67ffffffffffffffff83111562002a625762002a62620029e0565b62002a7a8362002a738354620028d2565b83620029f6565b6000601f84116001811462002ab1576000851562002a985750838201355b600019600387901b1c1916600186901b17835562000252565b600083815260209020601f19861690835b8281101562002ae4578685013582556020948501946001909201910162002ac2565b508682101562002b025760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b62002b2a62002b2383620029a6565b82620029c0565b62002b4662002b3c60208401620029a6565b60018301620029c0565b604082013560028201556060820135600382015560048101608083013580151580821462002b7357600080fd5b60ff19835416915060ff81168217835550505060a0820135601e1983360301811262002b9e57600080fd5b8201803567ffffffffffffffff81111562002bb857600080fd5b60208201915080360382131562002bce57600080fd5b6200167e81836005860162002a47565b60005b8381101562002bfb57818101518382015260200162002be1565b50506000910152565b60018060a01b0383168152604060208201526000825180604084015262002c3381606085016020870162002bde565b601f01601f1916919091016060019392505050565b6001600160a01b0392909216825267ffffffffffffffff16602082015260400190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121562002c9457600080fd5b815167ffffffffffffffff8082111562002cad57600080fd5b818401915084601f83011262002cc257600080fd5b81518181111562002cd75762002cd7620029e0565b604051601f8201601f19908116603f0116810190838211818310171562002d025762002d02620029e0565b8160405282815287602084870101111562002d1c57600080fd5b62002d2f83602083016020880162002bde565b979650505050505050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381811683821601908082111562002d735762002d7362002d3a565b5092915050565b60006001600160a01b038281166002600160a01b0319810162002da15762002da162002d3a565b6001019392505050565b6001600160a01b0382811682821603908082111562002d735762002d7362002d3a565b60006020828403121562002de157600080fd5b505191905056fe60a060405260405162000eb138038062000eb18339810160408190526200002691620003cd565b82816200003482826200009c565b505081604051620000459062000366565b6001600160a01b039091168152602001604051809103906000f08015801562000072573d6000803e3d6000fd5b506001600160a01b0316608052620000936200008d60805190565b62000102565b505050620004cb565b620000a78262000174565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115620000f457620000ef8282620001f4565b505050565b620000fe62000271565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014460008051602062000e91833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620001718162000293565b50565b806001600160a01b03163b600003620001b057604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b031684604051620002139190620004ad565b600060405180830381855af49150503d806000811462000250576040519150601f19603f3d011682016040523d82523d6000602084013e62000255565b606091505b50909250905062000268858383620002d6565b95945050505050565b3415620002915760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116620002bf57604051633173bdd160e11b815260006004820152602401620001a7565b8060008051602062000e91833981519152620001d3565b606082620002ef57620002e9826200033c565b62000335565b81511580156200030757506001600160a01b0384163b155b156200033257604051639996b31560e01b81526001600160a01b0385166004820152602401620001a7565b50805b9392505050565b8051156200034d5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b610524806200096d83390190565b80516001600160a01b03811681146200038c57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620003c4578181015183820152602001620003aa565b50506000910152565b600080600060608486031215620003e357600080fd5b620003ee8462000374565b9250620003fe6020850162000374565b60408501519092506001600160401b03808211156200041c57600080fd5b818601915086601f8301126200043157600080fd5b81518181111562000446576200044662000391565b604051601f8201601f19908116603f0116810190838211818310171562000471576200047162000391565b816040528281528960208487010111156200048b57600080fd5b6200049e836020830160208801620003a7565b80955050505050509250925092565b60008251620004c1818460208701620003a7565b9190910192915050565b608051610487620004e66000396000601001526104876000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361007b576000356001600160e01b03191663278f794360e11b14610071576040516334ad5dbb60e21b815260040160405180910390fd5b610079610083565b565b6100796100b2565b6000806100933660048184610312565b8101906100a09190610352565b915091506100ae82826100c2565b5050565b6100796100bd61011d565b610155565b6100cb82610179565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156101155761011082826101f5565b505050565b6100ae61026b565b60006101507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e808015610174573d6000f35b3d6000fd5b806001600160a01b03163b6000036101b457604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102129190610422565b600060405180830381855af49150503d806000811461024d576040519150601f19603f3d011682016040523d82523d6000602084013e610252565b606091505b509150915061026285838361028a565b95945050505050565b34156100795760405163b398979f60e01b815260040160405180910390fd5b60608261029f5761029a826102e9565b6102e2565b81511580156102b657506001600160a01b0384163b155b156102df57604051639996b31560e01b81526001600160a01b03851660048201526024016101ab565b50805b9392505050565b8051156102f95780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6000808585111561032257600080fd5b8386111561032f57600080fd5b5050820193919092039150565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561036557600080fd5b82356001600160a01b038116811461037c57600080fd5b9150602083013567ffffffffffffffff8082111561039957600080fd5b818501915085601f8301126103ad57600080fd5b8135818111156103bf576103bf61033c565b604051601f8201601f19908116603f011681019083821181831017156103e7576103e761033c565b8160405282815288602084870101111561040057600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000825160005b818110156104435760208186018101518583015201610429565b50600092019182525091905056fea26469706673582212200a3330bfe03a9656e4ac9fc33b82496617c9f6e3b6d624e79c4b7c2828b0a14164736f6c63430008180033608060405234801561001057600080fd5b5060405161052438038061052483398101604081905261002f916100be565b806001600160a01b03811661005e57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100678161006e565b50506100ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100d057600080fd5b81516001600160a01b03811681146100e757600080fd5b9392505050565b610427806100fd6000396000f3fe60806040526004361061004a5760003560e01c8063715018a61461004f5780638da5cb5b146100665780639623609d14610093578063ad3cb1cc146100a6578063f2fde38b146100e4575b600080fd5b34801561005b57600080fd5b50610064610104565b005b34801561007257600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b6100646100a1366004610272565b610118565b3480156100b257600080fd5b506100d7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161008a919061038e565b3480156100f057600080fd5b506100646100ff3660046103a8565b610187565b61010c6101ca565b61011660006101f7565b565b6101206101ca565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061015090869086906004016103c5565b6000604051808303818588803b15801561016957600080fd5b505af115801561017d573d6000803e3d6000fd5b5050505050505050565b61018f6101ca565b6001600160a01b0381166101be57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101c7816101f7565b50565b6000546001600160a01b031633146101165760405163118cdaa760e01b81523360048201526024016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101c757600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561028757600080fd5b833561029281610247565b925060208401356102a281610247565b9150604084013567ffffffffffffffff808211156102bf57600080fd5b818601915086601f8301126102d357600080fd5b8135818111156102e5576102e561025c565b604051601f8201601f19908116603f0116810190838211818310171561030d5761030d61025c565b8160405282815289602084870101111561032657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000815180845260005b8181101561036e57602081850181015186830182015201610352565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006103a16020830184610348565b9392505050565b6000602082840312156103ba57600080fd5b81356103a181610247565b6001600160a01b03831681526040602082018190526000906103e990830184610348565b94935050505056fea26469706673582212203e644249bd999cbe37c6c93843add180d0c31ce0f908a02409c401cd5f18ab8764736f6c63430008180033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61030000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12d6080604052600436106101dc5760003560e01c8063affed0e011610102578063e19a9dd911610095578063f08a032311610064578063f08a032314611647578063f698da2514611698578063f8dc5dd9146116c3578063ffa1ad741461173e57610231565b8063e19a9dd91461139b578063e318b52b146113ec578063e75235b81461147d578063e86637db146114a857610231565b8063cc2f8452116100d1578063cc2f8452146110e8578063d4d9bdcd146111b5578063d8d11f78146111f0578063e009cfde1461132a57610231565b8063affed0e014610d94578063b4faba0914610dbf578063b63e800d14610ea7578063c4ca3a9c1461101757610231565b80635624b25b1161017a5780636a761202116101495780636a761202146109945780637d83297414610b50578063934f3a1114610bbf578063a0e67e2b14610d2857610231565b80635624b25b146107fb5780635ae6bd37146108b9578063610b592514610908578063694e80c31461095957610231565b80632f54bf6e116101b65780632f54bf6e146104d35780633408e4701461053a578063468721a7146105655780635229073f1461067a57610231565b80630d582f131461029e57806312fb68e0146102f95780632d9ad53d1461046c57610231565b36610231573373ffffffffffffffffffffffffffffffffffffffff167f3d0ce9bfc3ed7d6862dbb28b2dea94561fe714a1b4d019aa8af39730d1ad7c3d346040518082815260200191505060405180910390a2005b34801561023d57600080fd5b5060007f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d560001b905080548061027257600080f35b36600080373360601b365260008060143601600080855af13d6000803e80610299573d6000fd5b3d6000f35b3480156102aa57600080fd5b506102f7600480360360408110156102c157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506117ce565b005b34801561030557600080fd5b5061046a6004803603608081101561031c57600080fd5b81019080803590602001909291908035906020019064010000000081111561034357600080fd5b82018360208201111561035557600080fd5b8035906020019184600183028401116401000000008311171561037757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156103da57600080fd5b8201836020820111156103ec57600080fd5b8035906020019184600183028401116401000000008311171561040e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050611bbe565b005b34801561047857600080fd5b506104bb6004803603602081101561048f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612440565b60405180821515815260200191505060405180910390f35b3480156104df57600080fd5b50610522600480360360208110156104f657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612512565b60405180821515815260200191505060405180910390f35b34801561054657600080fd5b5061054f6125e4565b6040518082815260200191505060405180910390f35b34801561057157600080fd5b506106626004803603608081101561058857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156105cf57600080fd5b8201836020820111156105e157600080fd5b8035906020019184600183028401116401000000008311171561060357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803560ff1690602001909291905050506125f1565b60405180821515815260200191505060405180910390f35b34801561068657600080fd5b506107776004803603608081101561069d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156106e457600080fd5b8201836020820111156106f657600080fd5b8035906020019184600183028401116401000000008311171561071857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803560ff1690602001909291905050506126fc565b60405180831515815260200180602001828103825283818151815260200191508051906020019080838360005b838110156107bf5780820151818401526020810190506107a4565b50505050905090810190601f1680156107ec5780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b34801561080757600080fd5b5061083e6004803603604081101561081e57600080fd5b810190808035906020019092919080359060200190929190505050612732565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561087e578082015181840152602081019050610863565b50505050905090810190601f1680156108ab5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156108c557600080fd5b506108f2600480360360208110156108dc57600080fd5b81019080803590602001909291905050506127b9565b6040518082815260200191505060405180910390f35b34801561091457600080fd5b506109576004803603602081101561092b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506127d1565b005b34801561096557600080fd5b506109926004803603602081101561097c57600080fd5b8101908080359060200190929190505050612b63565b005b610b3860048036036101408110156109ab57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156109f257600080fd5b820183602082011115610a0457600080fd5b80359060200191846001830284011164010000000083111715610a2657600080fd5b9091929391929390803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610ab257600080fd5b820183602082011115610ac457600080fd5b80359060200191846001830284011164010000000083111715610ae657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612c9d565b60405180821515815260200191505060405180910390f35b348015610b5c57600080fd5b50610ba960048036036040811015610b7357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612edc565b6040518082815260200191505060405180910390f35b348015610bcb57600080fd5b50610d2660048036036060811015610be257600080fd5b810190808035906020019092919080359060200190640100000000811115610c0957600080fd5b820183602082011115610c1b57600080fd5b80359060200191846001830284011164010000000083111715610c3d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610ca057600080fd5b820183602082011115610cb257600080fd5b80359060200191846001830284011164010000000083111715610cd457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612f01565b005b348015610d3457600080fd5b50610d3d612f90565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610d80578082015181840152602081019050610d65565b505050509050019250505060405180910390f35b348015610da057600080fd5b50610da9613139565b6040518082815260200191505060405180910390f35b348015610dcb57600080fd5b50610ea560048036036040811015610de257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610e1f57600080fd5b820183602082011115610e3157600080fd5b80359060200191846001830284011164010000000083111715610e5357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061313f565b005b348015610eb357600080fd5b506110156004803603610100811015610ecb57600080fd5b8101908080359060200190640100000000811115610ee857600080fd5b820183602082011115610efa57600080fd5b80359060200191846020830284011164010000000083111715610f1c57600080fd5b909192939192939080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610f6757600080fd5b820183602082011115610f7957600080fd5b80359060200191846001830284011164010000000083111715610f9b57600080fd5b9091929391929390803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613161565b005b34801561102357600080fd5b506110d26004803603608081101561103a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561108157600080fd5b82018360208201111561109357600080fd5b803590602001918460018302840111640100000000831117156110b557600080fd5b9091929391929390803560ff16906020019092919050505061331f565b6040518082815260200191505060405180910390f35b3480156110f457600080fd5b506111416004803603604081101561110b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613447565b60405180806020018373ffffffffffffffffffffffffffffffffffffffff168152602001828103825284818151815260200191508051906020019060200280838360005b838110156111a0578082015181840152602081019050611185565b50505050905001935050505060405180910390f35b3480156111c157600080fd5b506111ee600480360360208110156111d857600080fd5b8101908080359060200190929190505050613639565b005b3480156111fc57600080fd5b50611314600480360361014081101561121457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561125b57600080fd5b82018360208201111561126d57600080fd5b8035906020019184600183028401116401000000008311171561128f57600080fd5b9091929391929390803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506137d8565b6040518082815260200191505060405180910390f35b34801561133657600080fd5b506113996004803603604081101561134d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613805565b005b3480156113a757600080fd5b506113ea600480360360208110156113be57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613b96565b005b3480156113f857600080fd5b5061147b6004803603606081101561140f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613c1a565b005b34801561148957600080fd5b5061149261428c565b6040518082815260200191505060405180910390f35b3480156114b457600080fd5b506115cc60048036036101408110156114cc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561151357600080fd5b82018360208201111561152557600080fd5b8035906020019184600183028401116401000000008311171561154757600080fd5b9091929391929390803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050614296565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561160c5780820151818401526020810190506115f1565b50505050905090810190601f1680156116395780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561165357600080fd5b506116966004803603602081101561166a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061443e565b005b3480156116a457600080fd5b506116ad61449f565b6040518082815260200191505060405180910390f35b3480156116cf57600080fd5b5061173c600480360360608110156116e657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061451d565b005b34801561174a57600080fd5b50611753614950565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015611793578082015181840152602081019050611778565b50505050905090810190601f1680156117c05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6117d6614989565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156118405750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561187857503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b6118ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60026000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160026000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506003600081548092919060010191905055507f9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea2682604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a18060045414611bba57611bb981612b63565b5b5050565b611bd2604182614a2c90919063ffffffff16565b82511015611c48576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000808060008060005b8681101561243457611c648882614a66565b80945081955082965050505060008460ff16141561206d578260001c9450611c96604188614a2c90919063ffffffff16565b8260001c1015611d0e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8751611d2760208460001c614a9590919063ffffffff16565b1115611d9b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60006020838a01015190508851611dd182611dc360208760001c614a9590919063ffffffff16565b614a9590919063ffffffff16565b1115611e45576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60606020848b010190506320c13b0b60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168773ffffffffffffffffffffffffffffffffffffffff166320c13b0b8d846040518363ffffffff1660e01b8152600401808060200180602001838103835285818151815260200191508051906020019080838360005b83811015611ee7578082015181840152602081019050611ecc565b50505050905090810190601f168015611f145780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015611f4d578082015181840152602081019050611f32565b50505050905090810190601f168015611f7a5780820380516001836020036101000a031916815260200191505b5094505050505060206040518083038186803b158015611f9957600080fd5b505afa158015611fad573d6000803e3d6000fd5b505050506040513d6020811015611fc357600080fd5b81019080805190602001909291905050507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612066576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b50506122b2565b60018460ff161415612181578260001c94508473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061210a57506000600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008c81526020019081526020016000205414155b61217c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323500000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6122b1565b601e8460ff1611156122495760018a60405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c018281526020019150506040516020818303038152906040528051906020012060048603858560405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612238573d6000803e3d6000fd5b5050506020604051035194506122b0565b60018a85858560405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156122a3573d6000803e3d6000fd5b5050506020604051035194505b5b5b8573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161180156123795750600073ffffffffffffffffffffffffffffffffffffffff16600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b80156123b25750600173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b612424576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323600000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8495508080600101915050611c52565b50505050505050505050565b60008173ffffffffffffffffffffffffffffffffffffffff16600173ffffffffffffffffffffffffffffffffffffffff161415801561250b5750600073ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b6000600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156125dd5750600073ffffffffffffffffffffffffffffffffffffffff16600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b6000804690508091505090565b60007fb648d3644f584ed1c2232d53c46d87e693586486ad0d1175f8656013110b714e3386868686604051808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018060200183600181111561266b57fe5b8152602001828103825284818151815260200191508051906020019080838360005b838110156126a857808201518184015260208101905061268d565b50505050905090810190601f1680156126d55780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a16126f285858585614ab4565b9050949350505050565b6000606061270c868686866125f1565b915060405160203d0181016040523d81523d6000602083013e8091505094509492505050565b606060006020830267ffffffffffffffff8111801561275057600080fd5b506040519080825280601f01601f1916602001820160405280156127835781602001600182028036833780820191505090505b50905060005b838110156127ae57808501548060208302602085010152508080600101915050612789565b508091505092915050565b60076020528060005260406000206000915090505481565b6127d9614989565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156128435750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b6128b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f844081604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b612b6b614989565b600354811115612be3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001811015612c5a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b806004819055507f610f7ff2b304ae8903c3de74c60c6ab1f7d6226b3f52c5161905bb5ad4039c936004546040518082815260200191505060405180910390a150565b6000606060055433600454604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405160208183030381529060405290507f66753cd2356569ee081232e3be8909b950e0a76c1f8460c3a5e3c2be32b11bed8d8d8d8d8d8d8d8d8d8d8d8c604051808d73ffffffffffffffffffffffffffffffffffffffff1681526020018c8152602001806020018a6001811115612d5057fe5b81526020018981526020018881526020018781526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff168152602001806020018060200184810384528e8e82818152602001925080828437600081840152601f19601f820116905080830192505050848103835286818151815260200191508051906020019080838360005b83811015612e0a578082015181840152602081019050612def565b50505050905090810190601f168015612e375780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019080838360005b83811015612e70578082015181840152602081019050612e55565b50505050905090810190601f168015612e9d5780820380516001836020036101000a031916815260200191505b509f5050505050505050505050505050505060405180910390a1612eca8d8d8d8d8d8d8d8d8d8d8d614c9a565b9150509b9a5050505050505050505050565b6008602052816000526040600020602052806000526040600020600091509150505481565b6000600454905060008111612f7e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b612f8a84848484611bbe565b50505050565b6060600060035467ffffffffffffffff81118015612fad57600080fd5b50604051908082528060200260200182016040528015612fdc5781602001602082028036833780820191505090505b50905060008060026000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614613130578083838151811061308757fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508180600101925050613046565b82935050505090565b60055481565b600080825160208401855af4806000523d6020523d600060403e60403d016000fd5b6131ac8a8a80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050896151d7565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146131ea576131e9846156d7565b5b6132388787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050615706565b60008211156132525761325082600060018685615941565b505b3373ffffffffffffffffffffffffffffffffffffffff167f141df868a6331af528e38c83b7aa03edc19be66e37ae67f9285bf4f8e3c6a1a88b8b8b8b8960405180806020018581526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281038252878782818152602001925060200280828437600081840152601f19601f820116905080830192505050965050505050505060405180910390a250505050505050505050565b6000805a9050613376878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050865a615b47565b61337f57600080fd5b60005a8203905080604051602001808281526020019150506040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561340c5780820151818401526020810190506133f1565b50505050905090810190601f1680156134395780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b606060008267ffffffffffffffff8111801561346257600080fd5b506040519080825280602002602001820160405280156134915781602001602082028036833780820191505090505b509150600080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156135645750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561356f57508482105b1561362a578084838151811061358157fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081806001019250506134fa565b80925081845250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff16600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561373b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330333000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16817ff2a0eb156472d1440255b0d7c1e19cc07115d1051fe605b0dce69acfec884d9c60405160405180910390a350565b60006137ed8c8c8c8c8c8c8c8c8c8c8c614296565b8051906020012090509b9a5050505050505050505050565b61380d614989565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156138775750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b6138e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146139e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507faab4fa2b463f581b2b32cb3b7e3b704b9ce37cc209b5fb4d77e593ace405427681604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b613b9e614989565b60007f4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c860001b90508181557f1151116914515bc0891ff9047a6cb32cf902546f83066499bcf8ba33d2353fa282604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b613c22614989565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015613c8c5750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b8015613cc457503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b613d36576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613e37576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015613ea15750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b613f13576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614614013576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303500000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507ff8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf82604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a17f9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea2681604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1505050565b6000600454905090565b606060007fbb8310d486368db6bd6f849402fdd73ad53d316b5a4b2644ad6efe0f941286d860001b8d8d8d8d60405180838380828437808301925050509250505060405180910390208c8c8c8c8c8c8c604051602001808c81526020018b73ffffffffffffffffffffffffffffffffffffffff1681526020018a815260200189815260200188600181111561432757fe5b81526020018781526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019b505050505050505050505050604051602081830303815290604052805190602001209050601960f81b600160f81b6143b361449f565b8360405160200180857effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152600101847effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018381526020018281526020019450505050506040516020818303038152906040529150509b9a5050505050505050505050565b614446614989565b61444f816156d7565b7f5ac6c46c93c8d0e53714ba3b53db3e7c046da994313d7ed0d192028bc7c228b081604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b60007f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a7946921860001b6144cd6125e4565b30604051602001808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405160208183030381529060405280519060200120905090565b614525614989565b8060016003540310156145a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561460a5750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b61467c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461477c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303500000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360008154809291906001900391905055507ff8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf82604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1806004541461494b5761494a81612b63565b5b505050565b6040518060400160405280600581526020017f312e332e3000000000000000000000000000000000000000000000000000000081525081565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614614a2a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330333100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b565b600080831415614a3f5760009050614a60565b6000828402905082848281614a5057fe5b0414614a5b57600080fd5b809150505b92915050565b60008060008360410260208101860151925060408101860151915060ff60418201870151169350509250925092565b600080828401905083811015614aaa57600080fd5b8091505092915050565b6000600173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015614b7f5750600073ffffffffffffffffffffffffffffffffffffffff16600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b614bf1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b614bfe858585855a615b47565b90508015614c4e573373ffffffffffffffffffffffffffffffffffffffff167f6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb860405160405180910390a2614c92565b3373ffffffffffffffffffffffffffffffffffffffff167facd2c8702804128fdb0db2bb49f6d127dd0181c13fd45dbfe16de0930e2bd37560405160405180910390a25b949350505050565b6000806000614cb48e8e8e8e8e8e8e8e8e8e600554614296565b905060056000815480929190600101919050555080805190602001209150614cdd828286612f01565b506000614ce8615b93565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614614ece578073ffffffffffffffffffffffffffffffffffffffff166375f0bb528f8f8f8f8f8f8f8f8f8f8f336040518d63ffffffff1660e01b8152600401808d73ffffffffffffffffffffffffffffffffffffffff1681526020018c8152602001806020018a6001811115614d8b57fe5b81526020018981526020018881526020018781526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff168152602001806020018473ffffffffffffffffffffffffffffffffffffffff16815260200183810383528d8d82818152602001925080828437600081840152601f19601f820116905080830192505050838103825285818151815260200191508051906020019080838360005b83811015614e5d578082015181840152602081019050614e42565b50505050905090810190601f168015614e8a5780820380516001836020036101000a031916815260200191505b509e505050505050505050505050505050600060405180830381600087803b158015614eb557600080fd5b505af1158015614ec9573d6000803e3d6000fd5b505050505b6101f4614ef56109c48b01603f60408d0281614ee657fe5b04615bc490919063ffffffff16565b015a1015614f6b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60005a9050614fd48f8f8f8f8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508e60008d14614fc9578e614fcf565b6109c45a035b615b47565b9350614fe95a82615bde90919063ffffffff16565b90508380614ff8575060008a14155b80615004575060008814155b615076576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000808911156150905761508d828b8b8b8b615941565b90505b84156150da577f442e715f626346e8c54381002da614f62bee8d27386535b2521ec8540898556e8482604051808381526020018281526020019250505060405180910390a161511a565b7f23428b18acfb3ea64b08dc0c1d296ea9c09702c09083ca5272e64d115b687d238482604051808381526020018281526020019250505060405180910390a15b5050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146151c6578073ffffffffffffffffffffffffffffffffffffffff16639327136883856040518363ffffffff1660e01b815260040180838152602001821515815260200192505050600060405180830381600087803b1580156151ad57600080fd5b505af11580156151c1573d6000803e3d6000fd5b505050505b50509b9a5050505050505050505050565b60006004541461524f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b81518111156152c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600181101561533d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60006001905060005b835181101561564357600084828151811061535d57fe5b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156153d15750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561540957503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561544157508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b6154b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146155b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550809250508080600101915050615346565b506001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550825160038190555081600481905550505050565b60007f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d560001b90508181555050565b600073ffffffffffffffffffffffffffffffffffffffff1660016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614615808576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001806000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461593d576158ca8260008360015a615b47565b61593c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330303000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b5b5050565b600080600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461597e5782615980565b325b9050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415615a98576159ea3a86106159c7573a6159c9565b855b6159dc888a614a9590919063ffffffff16565b614a2c90919063ffffffff16565b91508073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050615a93576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b615b3d565b615abd85615aaf888a614a9590919063ffffffff16565b614a2c90919063ffffffff16565b9150615aca848284615bfe565b615b3c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b5b5095945050505050565b6000600180811115615b5557fe5b836001811115615b6157fe5b1415615b7a576000808551602087018986f49050615b8a565b600080855160208701888a87f190505b95945050505050565b6000807f4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c860001b9050805491505090565b600081831015615bd45781615bd6565b825b905092915050565b600082821115615bed57600080fd5b600082840390508091505092915050565b60008063a9059cbb8484604051602401808373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001925050506040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050602060008251602084016000896127105a03f13d60008114615ca55760208114615cad5760009350615cb8565b819350615cb8565b600051158215171593505b505050939250505056fea2646970667358221220047fac33099ca576d1c4f1ac6a8abdb0396e42ad6a397d2cb2f4dc1624cc0c5b64736f6c634300070600336080600436101561000f57600080fd5b6000803560e01c63570e1a361461002557600080fd5b3461018a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018a576004359167ffffffffffffffff9081841161018657366023850112156101865783600401358281116101825736602482870101116101825780601411610182577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec810192808411610155577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f81600b8501160116830190838210908211176101555792846024819482600c60209a968b9960405286845289840196603889018837830101525193013560601c5af1908051911561014d575b5073ffffffffffffffffffffffffffffffffffffffff60405191168152f35b90503861012e565b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b8380fd5b8280fd5b80fdfea26469706673582212207adef8895ad3393b02fab10a111d85ea80ff35366aa43995f4ea20e67f29200664736f6c634300081700337fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf360806040526004361061001e5760003560e01c80638d80ff0a14610023575b600080fd5b6100dc6004803603602081101561003957600080fd5b810190808035906020019064010000000081111561005657600080fd5b82018360208201111561006857600080fd5b8035906020019184600183028401116401000000008311171561008a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506100de565b005b7f000000000000000000000000998739bfdaadde7c933b942a68053933098f9eda73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610183576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806102106030913960400191505060405180910390fd5b805160205b8181101561020a578083015160f81c6001820184015160601c6015830185015160358401860151605585018701600085600081146101cd57600181146101dd576101e8565b6000808585888a5af191506101e8565b6000808585895af491505b5060008114156101f757600080fd5b8260550187019650505050505050610188565b50505056fe4d756c746953656e642073686f756c64206f6e6c792062652063616c6c6564207669612064656c656761746563616c6ca26469706673582212205c784303626eec02b71940b551976170b500a8a36cc5adcbeb2c19751a76d05464736f6c6343000706003360806040526004361015610024575b361561001957600080fd5b61002233612748565b005b60003560e01c806242dc5314611b0057806301ffc9a7146119ae5780630396cb60146116765780630bd28e3b146115fa5780631b2e01b814611566578063205c2878146113d157806322cdde4c1461136b57806335567e1a146112b35780635287ce12146111a557806370a0823114611140578063765e827f14610e82578063850aaf6214610dc35780639b249f6914610c74578063b760faf914610c3a578063bb9fe6bf14610a68578063c23a5cea146107c4578063dbed18e0146101a15763fc7e286d0361000e573461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5773ffffffffffffffffffffffffffffffffffffffff61013a61229f565b16600052600060205260a0604060002065ffffffffffff6001825492015460405192835260ff8116151560208401526dffffffffffffffffffffffffffff8160081c16604084015263ffffffff8160781c16606084015260981c166080820152f35b600080fd5b3461019c576101af36612317565b906101b86129bd565b60009160005b82811061056f57506101d08493612588565b6000805b8481106102fc5750507fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f972600080a16000809360005b81811061024757610240868660007f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d8180a2613ba7565b6001600255005b6102a261025582848a612796565b73ffffffffffffffffffffffffffffffffffffffff6102766020830161282a565b167f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d600080a2806127d6565b906000915b8083106102b957505050600101610209565b909194976102f36102ed6001926102e78c8b6102e0826102da8e8b8d61269d565b9261265a565b5191613597565b90612409565b99612416565b950191906102a7565b6020610309828789612796565b61031f61031682806127d6565b9390920161282a565b9160009273ffffffffffffffffffffffffffffffffffffffff8091165b8285106103505750505050506001016101d4565b909192939561037f83610378610366848c61265a565b516103728b898b61269d565b856129f6565b9290613dd7565b9116840361050a576104a5576103958491613dd7565b9116610440576103b5576103aa600191612416565b96019392919061033c565b60a487604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152602160448201527f41413332207061796d61737465722065787069726564206f72206e6f7420647560648201527f65000000000000000000000000000000000000000000000000000000000000006084820152fd5b608488604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601460448201527f41413334207369676e6174757265206572726f720000000000000000000000006064820152fd5b608488604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601760448201527f414132322065787069726564206f72206e6f74206475650000000000000000006064820152fd5b608489604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601460448201527f41413234207369676e6174757265206572726f720000000000000000000000006064820152fd5b61057a818487612796565b9361058585806127d6565b919095602073ffffffffffffffffffffffffffffffffffffffff6105aa82840161282a565b1697600192838a1461076657896105da575b5050505060019293949550906105d191612409565b939291016101be565b8060406105e892019061284b565b918a3b1561019c57929391906040519485937f2dd8113300000000000000000000000000000000000000000000000000000000855288604486016040600488015252606490818601918a60051b8701019680936000915b8c83106106e657505050505050838392610684927ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8560009803016024860152612709565b03818a5afa90816106d7575b506106c657602486604051907f86a9f7500000000000000000000000000000000000000000000000000000000082526004820152fd5b93945084936105d1600189806105bc565b6106e0906121bd565b88610690565b91939596977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c908a9294969a0301865288357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee18336030181121561019c57836107538793858394016128ec565b9a0196019301909189979695949261063f565b606483604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601760248201527f4141393620696e76616c69642061676772656761746f720000000000000000006044820152fd5b3461019c576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c576107fc61229f565b33600052600082526001604060002001908154916dffffffffffffffffffffffffffff8360081c16928315610a0a5765ffffffffffff8160981c1680156109ac57421061094e5760009373ffffffffffffffffffffffffffffffffffffffff859485947fffffffffffffff000000000000000000000000000000000000000000000000ff86951690556040517fb7c918e0e249f999e965cafeb6c664271b3f4317d296461500e71da39f0cbda33391806108da8786836020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b0390a2165af16108e8612450565b50156108f057005b606490604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601860248201527f6661696c656420746f207769746864726177207374616b6500000000000000006044820152fd5b606485604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601b60248201527f5374616b65207769746864726177616c206973206e6f742064756500000000006044820152fd5b606486604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601d60248201527f6d7573742063616c6c20756e6c6f636b5374616b6528292066697273740000006044820152fd5b606485604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601460248201527f4e6f207374616b6520746f2077697468647261770000000000000000000000006044820152fd5b3461019c5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c573360005260006020526001604060002001805463ffffffff8160781c16908115610bdc5760ff1615610b7e5765ffffffffffff908142160191818311610b4f5780547fffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff001678ffffffffffff00000000000000000000000000000000000000609885901b161790556040519116815233907ffa9b3c14cc825c412c9ed81b3ba365a5b459439403f18829e572ed53a4180f0a90602090a2005b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f616c726561647920756e7374616b696e670000000000000000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6e6f74207374616b6564000000000000000000000000000000000000000000006044820152fd5b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c57610022610c6f61229f565b612748565b3461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5760043567ffffffffffffffff811161019c576020610cc8610d1b9236906004016122c2565b919073ffffffffffffffffffffffffffffffffffffffff9260405194859283927f570e1a360000000000000000000000000000000000000000000000000000000084528560048501526024840191612709565b03816000857f000000000000000000000000efc2c1444ebcc4db75e7613d20c6a62ff67a167c165af1908115610db757602492600092610d86575b50604051917f6ca7b806000000000000000000000000000000000000000000000000000000008352166004820152fd5b610da991925060203d602011610db0575b610da181836121ed565b8101906126dd565b9083610d56565b503d610d97565b6040513d6000823e3d90fd5b3461019c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c57610dfa61229f565b60243567ffffffffffffffff811161019c57600091610e1e839236906004016122c2565b90816040519283928337810184815203915af4610e39612450565b90610e7e6040519283927f99410554000000000000000000000000000000000000000000000000000000008452151560048401526040602484015260448301906123c6565b0390fd5b3461019c57610e9036612317565b610e9b9291926129bd565b610ea483612588565b60005b848110610f1c57506000927fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f972600080a16000915b858310610eec576102408585613ba7565b909193600190610f12610f0087898761269d565b610f0a888661265a565b519088613597565b0194019190610edb565b610f47610f40610f2e8385979561265a565b51610f3a84898761269d565b846129f6565b9190613dd7565b73ffffffffffffffffffffffffffffffffffffffff929183166110db5761107657610f7190613dd7565b911661101157610f8657600101929092610ea7565b60a490604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152602160448201527f41413332207061796d61737465722065787069726564206f72206e6f7420647560648201527f65000000000000000000000000000000000000000000000000000000000000006084820152fd5b608482604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601460448201527f41413334207369676e6174757265206572726f720000000000000000000000006064820152fd5b608483604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601760448201527f414132322065787069726564206f72206e6f74206475650000000000000000006064820152fd5b608484604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601460448201527f41413234207369676e6174757265206572726f720000000000000000000000006064820152fd5b3461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5773ffffffffffffffffffffffffffffffffffffffff61118c61229f565b1660005260006020526020604060002054604051908152f35b3461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5773ffffffffffffffffffffffffffffffffffffffff6111f161229f565b6000608060405161120181612155565b828152826020820152826040820152826060820152015216600052600060205260a06040600020608060405161123681612155565b6001835493848352015490602081019060ff8316151582526dffffffffffffffffffffffffffff60408201818560081c16815263ffffffff936060840193858760781c16855265ffffffffffff978891019660981c1686526040519788525115156020880152511660408601525116606084015251166080820152f35b3461019c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5760206112ec61229f565b73ffffffffffffffffffffffffffffffffffffffff6113096122f0565b911660005260018252604060002077ffffffffffffffffffffffffffffffffffffffffffffffff821660005282526040600020547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000006040519260401b16178152f35b3461019c577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60208136011261019c576004359067ffffffffffffffff821161019c5761012090823603011261019c576113c9602091600401612480565b604051908152f35b3461019c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5761140861229f565b60243590336000526000602052604060002090815491828411611508576000808573ffffffffffffffffffffffffffffffffffffffff8295839561144c848a612443565b90556040805173ffffffffffffffffffffffffffffffffffffffff831681526020810185905233917fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb91a2165af16114a2612450565b50156114aa57005b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6661696c656420746f20776974686472617700000000000000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f576974686472617720616d6f756e7420746f6f206c61726765000000000000006044820152fd5b3461019c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5761159d61229f565b73ffffffffffffffffffffffffffffffffffffffff6115ba6122f0565b9116600052600160205277ffffffffffffffffffffffffffffffffffffffffffffffff604060002091166000526020526020604060002054604051908152f35b3461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5760043577ffffffffffffffffffffffffffffffffffffffffffffffff811680910361019c5733600052600160205260406000209060005260205260406000206116728154612416565b9055005b6020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5760043563ffffffff9182821680920361019c5733600052600081526040600020928215611950576001840154908160781c1683106118f2576116f86dffffffffffffffffffffffffffff9182349160081c16612409565b93841561189457818511611836579065ffffffffffff61180592546040519061172082612155565b8152848101926001845260408201908816815260608201878152600160808401936000855233600052600089526040600020905181550194511515917fffffffffffffffffffffffffff0000000000000000000000000000000000000060ff72ffffffff0000000000000000000000000000006effffffffffffffffffffffffffff008954945160081b16945160781b1694169116171717835551167fffffffffffffff000000000000ffffffffffffffffffffffffffffffffffffff78ffffffffffff0000000000000000000000000000000000000083549260981b169116179055565b6040519283528201527fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c0160403392a2005b606483604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152600e60248201527f7374616b65206f766572666c6f770000000000000000000000000000000000006044820152fd5b606483604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601260248201527f6e6f207374616b652073706563696669656400000000000000000000000000006044820152fd5b606482604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601c60248201527f63616e6e6f7420646563726561736520756e7374616b652074696d65000000006044820152fd5b606482604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601a60248201527f6d757374207370656369667920756e7374616b652064656c61790000000000006044820152fd5b3461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c576004357fffffffff00000000000000000000000000000000000000000000000000000000811680910361019c57807f60fc6b6e0000000000000000000000000000000000000000000000000000000060209214908115611ad6575b8115611aac575b8115611a82575b8115611a58575b506040519015158152f35b7f01ffc9a70000000000000000000000000000000000000000000000000000000091501482611a4d565b7f3e84f0210000000000000000000000000000000000000000000000000000000081149150611a46565b7fcf28ef970000000000000000000000000000000000000000000000000000000081149150611a3f565b7f915074d80000000000000000000000000000000000000000000000000000000081149150611a38565b3461019c576102007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5767ffffffffffffffff60043581811161019c573660238201121561019c57611b62903690602481600401359101612268565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36016101c0811261019c5761014060405191611b9e83612155565b1261019c5760405192611bb0846121a0565b60243573ffffffffffffffffffffffffffffffffffffffff8116810361019c578452602093604435858201526064356040820152608435606082015260a435608082015260c43560a082015260e43560c08201526101043573ffffffffffffffffffffffffffffffffffffffff8116810361019c5760e08201526101243561010082015261014435610120820152825261016435848301526101843560408301526101a43560608301526101c43560808301526101e43590811161019c57611c7c9036906004016122c2565b905a3033036120f7578351606081015195603f5a0260061c61271060a0840151890101116120ce5760009681519182611ff0575b5050505090611cca915a9003608085015101923691612268565b925a90600094845193611cdc85613ccc565b9173ffffffffffffffffffffffffffffffffffffffff60e0870151168015600014611ea957505073ffffffffffffffffffffffffffffffffffffffff855116935b5a9003019360a06060820151910151016080860151850390818111611e95575b50508302604085015192818410600014611dce5750506003811015611da157600203611d79576113c99293508093611d7481613d65565b613cf6565b5050507fdeadaa51000000000000000000000000000000000000000000000000000000008152fd5b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526021600452fd5b81611dde92979396940390613c98565b506003841015611e6857507f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f60808683015192519473ffffffffffffffffffffffffffffffffffffffff865116948873ffffffffffffffffffffffffffffffffffffffff60e0890151169701519160405192835215898301528760408301526060820152a46113c9565b807f4e487b7100000000000000000000000000000000000000000000000000000000602492526021600452fd5b6064919003600a0204909301928780611d3d565b8095918051611eba575b5050611d1d565b6003861015611fc1576002860315611eb35760a088015190823b1561019c57600091611f2491836040519586809581947f7c627b210000000000000000000000000000000000000000000000000000000083528d60048401526080602484015260848301906123c6565b8b8b0260448301528b60648301520393f19081611fad575b50611fa65787893d610800808211611f9e575b506040519282828501016040528184528284013e610e7e6040519283927fad7954bc000000000000000000000000000000000000000000000000000000008452600484015260248301906123c6565b905083611f4f565b8980611eb3565b611fb89199506121bd565b6000978a611f3c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91600092918380938c73ffffffffffffffffffffffffffffffffffffffff885116910192f115612023575b808080611cb0565b611cca929195503d6108008082116120c6575b5060405190888183010160405280825260008983013e805161205f575b5050600194909161201b565b7f1c4fada7374c0a9ee8841fc38afe82932dc0f8e69012e927f061a8bae611a20188870151918973ffffffffffffffffffffffffffffffffffffffff8551169401516120bc604051928392835260408d84015260408301906123c6565b0390a38680612053565b905088612036565b877fdeaddead000000000000000000000000000000000000000000000000000000006000526000fd5b606486604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601760248201527f4141393220696e7465726e616c2063616c6c206f6e6c790000000000000000006044820152fd5b60a0810190811067ffffffffffffffff82111761217157604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610140810190811067ffffffffffffffff82111761217157604052565b67ffffffffffffffff811161217157604052565b6060810190811067ffffffffffffffff82111761217157604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761217157604052565b67ffffffffffffffff811161217157601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926122748261222e565b9161228260405193846121ed565b82948184528183011161019c578281602093846000960137010152565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361019c57565b9181601f8401121561019c5782359167ffffffffffffffff831161019c576020838186019501011161019c57565b6024359077ffffffffffffffffffffffffffffffffffffffffffffffff8216820361019c57565b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83011261019c5760043567ffffffffffffffff9283821161019c578060238301121561019c57816004013593841161019c5760248460051b8301011161019c57602401919060243573ffffffffffffffffffffffffffffffffffffffff8116810361019c5790565b60005b8381106123b65750506000910152565b81810151838201526020016123a6565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093612402815180928187528780880191016123a3565b0116010190565b91908201809211610b4f57565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610b4f5760010190565b91908203918211610b4f57565b3d1561247b573d906124618261222e565b9161246f60405193846121ed565b82523d6000602084013e565b606090565b604061248e8183018361284b565b90818351918237206124a3606084018461284b565b90818451918237209260c06124bb60e083018361284b565b908186519182372091845195602087019473ffffffffffffffffffffffffffffffffffffffff833516865260208301358789015260608801526080870152608081013560a087015260a081013582870152013560e08501526101009081850152835261012083019167ffffffffffffffff918484108385111761217157838252845190206101408501908152306101608601524661018086015260608452936101a00191821183831017612171575251902090565b67ffffffffffffffff81116121715760051b60200190565b9061259282612570565b6040906125a260405191826121ed565b8381527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06125d08295612570565b019160005b8381106125e25750505050565b60209082516125f081612155565b83516125fb816121a0565b600081526000849181838201528187820152816060818184015260809282848201528260a08201528260c08201528260e082015282610100820152826101208201528652818587015281898701528501528301528286010152016125d5565b805182101561266e5760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b919081101561266e5760051b810135907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee18136030182121561019c570190565b9081602091031261019c575173ffffffffffffffffffffffffffffffffffffffff8116810361019c5790565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b7f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4602073ffffffffffffffffffffffffffffffffffffffff61278a3485613c98565b936040519485521692a2565b919081101561266e5760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa18136030182121561019c570190565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561019c570180359067ffffffffffffffff821161019c57602001918160051b3603831361019c57565b3573ffffffffffffffffffffffffffffffffffffffff8116810361019c5790565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561019c570180359067ffffffffffffffff821161019c5760200191813603831361019c57565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561019c57016020813591019167ffffffffffffffff821161019c57813603831361019c57565b61012091813573ffffffffffffffffffffffffffffffffffffffff811680910361019c576129626129476129ba9561299b93855260208601356020860152612937604087018761289c565b9091806040880152860191612709565b612954606086018661289c565b908583036060870152612709565b6080840135608084015260a084013560a084015260c084013560c084015261298d60e085018561289c565b9084830360e0860152612709565b916129ac610100918281019061289c565b929091818503910152612709565b90565b60028054146129cc5760028055565b60046040517f3ee5aeb5000000000000000000000000000000000000000000000000000000008152fd5b926000905a93805194843573ffffffffffffffffffffffffffffffffffffffff811680910361019c5786526020850135602087015260808501356fffffffffffffffffffffffffffffffff90818116606089015260801c604088015260a086013560c088015260c086013590811661010088015260801c610120870152612a8060e086018661284b565b801561357b576034811061351d578060141161019c578060241161019c5760341161019c57602481013560801c60a0880152601481013560801c60808801523560601c60e08701525b612ad285612480565b60208301526040860151946effffffffffffffffffffffffffffff8660c08901511760608901511760808901511760a0890151176101008901511761012089015117116134bf57604087015160608801510160808801510160a08801510160c0880151016101008801510296835173ffffffffffffffffffffffffffffffffffffffff81511690612b66604085018561284b565b806131e4575b505060e0015173ffffffffffffffffffffffffffffffffffffffff1690600082156131ac575b6020612bd7918b828a01516000868a604051978896879586937f19822f7c00000000000000000000000000000000000000000000000000000000855260048501613db5565b0393f160009181613178575b50612c8b573d8c610800808311612c83575b50604051916020818401016040528083526000602084013e610e7e6040519283927f65c8fd4d000000000000000000000000000000000000000000000000000000008452600484015260606024840152600d60648401527f4141323320726576657274656400000000000000000000000000000000000000608484015260a0604484015260a48301906123c6565b915082612bf5565b9a92939495969798999a91156130f2575b509773ffffffffffffffffffffffffffffffffffffffff835116602084015190600052600160205260406000208160401c60005260205267ffffffffffffffff604060002091825492612cee84612416565b9055160361308d575a8503116130285773ffffffffffffffffffffffffffffffffffffffff60e0606093015116612d42575b509060a09184959697986040608096015260608601520135905a900301910152565b969550505a9683519773ffffffffffffffffffffffffffffffffffffffff60e08a01511680600052600060205260406000208054848110612fc3576080612dcd9a9b9c600093878094039055015192602089015183604051809d819582947f52b7512c0000000000000000000000000000000000000000000000000000000084528c60048501613db5565b039286f1978860009160009a612f36575b50612e86573d8b610800808311612e7e575b50604051916020818401016040528083526000602084013e610e7e6040519283927f65c8fd4d000000000000000000000000000000000000000000000000000000008452600484015260606024840152600d60648401527f4141333320726576657274656400000000000000000000000000000000000000608484015260a0604484015260a48301906123c6565b915082612df0565b9991929394959697989998925a900311612eab57509096959094939291906080612d20565b60a490604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152602760448201527f41413336206f766572207061796d6173746572566572696669636174696f6e4760648201527f61734c696d6974000000000000000000000000000000000000000000000000006084820152fd5b915098503d90816000823e612f4b82826121ed565b604081838101031261019c5780519067ffffffffffffffff821161019c57828101601f83830101121561019c578181015191612f868361222e565b93612f9460405195866121ed565b838552820160208483850101011161019c57602092612fba9184808701918501016123a3565b01519838612dde565b60848b604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601e60448201527f41413331207061796d6173746572206465706f73697420746f6f206c6f7700006064820152fd5b608490604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601e60448201527f41413236206f76657220766572696669636174696f6e4761734c696d697400006064820152fd5b608482604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601a60448201527f4141323520696e76616c6964206163636f756e74206e6f6e63650000000000006064820152fd5b600052600060205260406000208054808c11613113578b9003905538612c9c565b608484604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601760448201527f41413231206469646e2774207061792070726566756e640000000000000000006064820152fd5b9091506020813d6020116131a4575b81613194602093836121ed565b8101031261019c57519038612be3565b3d9150613187565b508060005260006020526040600020548a81116000146131d75750612bd7602060005b915050612b92565b6020612bd7918c036131cf565b833b61345a57604088510151602060405180927f570e1a360000000000000000000000000000000000000000000000000000000082528260048301528160008161323260248201898b612709565b039273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000efc2c1444ebcc4db75e7613d20c6a62ff67a167c1690f1908115610db75760009161343b575b5073ffffffffffffffffffffffffffffffffffffffff811680156133d6578503613371573b1561330c5760141161019c5773ffffffffffffffffffffffffffffffffffffffff9183887fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d604060e0958787602086015195510151168251913560601c82526020820152a391612b6c565b60848d604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152602060448201527f4141313520696e6974436f6465206d757374206372656174652073656e6465726064820152fd5b60848e604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152602060448201527f4141313420696e6974436f6465206d7573742072657475726e2073656e6465726064820152fd5b60848f604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601b60448201527f4141313320696e6974436f6465206661696c6564206f72204f4f4700000000006064820152fd5b613454915060203d602011610db057610da181836121ed565b3861327c565b60848d604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601f60448201527f414131302073656e64657220616c726561647920636f6e7374727563746564006064820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f41413934206761732076616c756573206f766572666c6f7700000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4141393320696e76616c6964207061796d6173746572416e64446174610000006044820152fd5b5050600060e087015260006080870152600060a0870152612ac9565b9092915a906060810151916040928351967fffffffff00000000000000000000000000000000000000000000000000000000886135d7606084018461284b565b600060038211613b9f575b7f8dd7712f0000000000000000000000000000000000000000000000000000000094168403613a445750505061379d6000926136b292602088015161363a8a5193849360208501528b602485015260648401906128ec565b90604483015203906136727fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0928381018352826121ed565b61379189519485927e42dc5300000000000000000000000000000000000000000000000000000000602085015261020060248501526102248401906123c6565b613760604484018b60806101a091805173ffffffffffffffffffffffffffffffffffffffff808251168652602082015160208701526040820151604087015260608201516060870152838201518487015260a082015160a087015260c082015160c087015260e08201511660e0860152610100808201519086015261012080910151908501526020810151610140850152604081015161016085015260608101516101808501520151910152565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc83820301610204840152876123c6565b039081018352826121ed565b6020918183809351910182305af1600051988652156137bf575b505050505050565b909192939495965060003d8214613a3a575b7fdeaddead00000000000000000000000000000000000000000000000000000000810361385b57608487878051917f220266b600000000000000000000000000000000000000000000000000000000835260048301526024820152600f60448201527f41413935206f7574206f662067617300000000000000000000000000000000006064820152fd5b7fdeadaa510000000000000000000000000000000000000000000000000000000091929395949650146000146138c55750506138a961389e6138b8935a90612443565b608085015190612409565b9083015183611d748295613d65565b905b3880808080806137b7565b909261395290828601518651907ff62676f440ff169a3a9afdbf812e89e7f95975ee8e5c31214ffdef631c5f479273ffffffffffffffffffffffffffffffffffffffff9580878551169401516139483d610800808211613a32575b508a519084818301018c5280825260008583013e8a805194859485528401528a8301906123c6565b0390a35a90612443565b916139636080860193845190612409565b926000905a94829488519761397789613ccc565b948260e08b0151168015600014613a1857505050875116955b5a9003019560a06060820151910151019051860390818111613a04575b5050840290850151928184106000146139de57505080611e68575090816139d89293611d7481613d65565b906138ba565b6139ee9082849397950390613c98565b50611e68575090826139ff92613cf6565b6139d8565b6064919003600a02049094019338806139ad565b90919892509751613a2a575b50613990565b955038613a24565b905038613920565b8181803e516137d1565b613b97945082935090613a8c917e42dc53000000000000000000000000000000000000000000000000000000006020613b6b9501526102006024860152610224850191612709565b613b3a604484018860806101a091805173ffffffffffffffffffffffffffffffffffffffff808251168652602082015160208701526040820151604087015260608201516060870152838201518487015260a082015160a087015260c082015160c087015260e08201511660e0860152610100808201519086015261012080910151908501526020810151610140850152604081015161016085015260608101516101808501520151910152565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc83820301610204840152846123c6565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018952886121ed565b60008761379d565b5081356135e2565b73ffffffffffffffffffffffffffffffffffffffff168015613c3a57600080809381935af1613bd4612450565b5015613bdc57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f41413931206661696c65642073656e6420746f2062656e6566696369617279006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4141393020696e76616c69642062656e656669636961727900000000000000006044820152fd5b73ffffffffffffffffffffffffffffffffffffffff166000526000602052613cc66040600020918254612409565b80915590565b610120610100820151910151808214613cf257480180821015613ced575090565b905090565b5090565b9190917f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f6080602083015192519473ffffffffffffffffffffffffffffffffffffffff946020868851169660e089015116970151916040519283526000602084015260408301526060820152a4565b60208101519051907f67b4fa9642f42120bf031f3051d1824b0fe25627945b27b8a6a65d5761d5482e60208073ffffffffffffffffffffffffffffffffffffffff855116940151604051908152a3565b613dcd604092959493956060835260608301906128ec565b9460208201520152565b8015613e6457600060408051613dec816121d1565b828152826020820152015273ffffffffffffffffffffffffffffffffffffffff811690604065ffffffffffff91828160a01c16908115613e5c575b60d01c92825191613e37836121d1565b8583528460208401521691829101524211908115613e5457509091565b905042109091565b839150613e27565b5060009060009056fea2646970667358221220b094fd69f04977ae9458e5ba422d01cd2d20dbcfca0992ff37f19aa07deec25464736f6c6343000817003360806040526004361061001e5760003560e01c80638d80ff0a14610023575b600080fd5b6100dc6004803603602081101561003957600080fd5b810190808035906020019064010000000081111561005657600080fd5b82018360208201111561006857600080fd5b8035906020019184600183028401116401000000008311171561008a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506100de565b005b805160205b8181101561015f578083015160f81c6001820184015160601c60158301850151603584018601516055850187016000856000811461012857600181146101385761013d565b6000808585888a5af1915061013d565b600080fd5b50600081141561014c57600080fd5b82605501870196505050505050506100e3565b50505056fea264697066735822122035246402746c96964495cae5b36461fd44dfb89f8e6cf6f6b8d60c0aa89f414864736f6c634300070600336080604052600436101561001257600080fd5b6000803560e01c63570e1a361461002857600080fd5b346100c95760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100c95760043567ffffffffffffffff918282116100c957366023830112156100c95781600401359283116100c95736602484840101116100c9576100c561009e84602485016100fc565b60405173ffffffffffffffffffffffffffffffffffffffff90911681529081906020820190565b0390f35b80fd5b507f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90806014116101bb5767ffffffffffffffff917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec82018381116101cd575b604051937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f81600b8701160116850190858210908211176101c0575b604052808452602084019036848401116101bb576020946000600c819682946014880187378301015251923560601c5af19060005191156101b557565b60009150565b600080fd5b6101c86100cc565b610178565b6101d56100cc565b61013a56fea26469706673582212201927e80b76ab9b71c952137dd676621a9fdf520c25928815636594036eb1c40364736f6c634300081100336080604052600436106100435760003560e01c8063076c37b21461004f578063481286e61461007157806356299481146100ba57806366cfa057146100da57600080fd5b3661004a57005b600080fd5b34801561005b57600080fd5b5061006f61006a366004610327565b6100fa565b005b34801561007d57600080fd5b5061009161008c366004610327565b61014a565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100c657600080fd5b506100916100d5366004610349565b61015d565b3480156100e657600080fd5b5061006f6100f53660046103ca565b610172565b61014582826040518060200161010f9061031a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082820381018352601f90910116604052610183565b505050565b600061015683836102e7565b9392505050565b600061016a8484846102f0565b949350505050565b61017d838383610183565b50505050565b6000834710156101f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e636500000060448201526064015b60405180910390fd5b815160000361025f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f60448201526064016101eb565b8282516020840186f5905073ffffffffffffffffffffffffffffffffffffffff8116610156576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f790000000000000060448201526064016101eb565b60006101568383305b6000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b61014e806104ad83390190565b6000806040838503121561033a57600080fd5b50508035926020909101359150565b60008060006060848603121561035e57600080fd5b8335925060208401359150604084013573ffffffffffffffffffffffffffffffffffffffff8116811461039057600080fd5b809150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806000606084860312156103df57600080fd5b8335925060208401359150604084013567ffffffffffffffff8082111561040557600080fd5b818601915086601f83011261041957600080fd5b81358181111561042b5761042b61039b565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156104715761047161039b565b8160405282815289602084870101111561048a57600080fd5b826020860160208301376000602084830101528095505050505050925092509256fe608060405234801561001057600080fd5b5061012e806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063249cb3fa14602d575b600080fd5b603c603836600460b1565b604e565b60405190815260200160405180910390f35b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16608857600060aa565b7fa2ef4600d742022d532d4747cb3547474667d6f13804902513b2ec01c848f4b45b9392505050565b6000806040838503121560c357600080fd5b82359150602083013573ffffffffffffffffffffffffffffffffffffffff8116811460ed57600080fd5b80915050925092905056fea26469706673582212205ffd4e6cede7d06a5daf93d48d0541fc68189eeb16608c1999a82063b666eb1164736f6c63430008130033a2646970667358221220fdc4a0fe96e3b21c108ca155438d37c9143fb01278a3c1d274948bad89c564ba64736f6c63430008130033885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d6080604052600436106101dc5760003560e01c8063affed0e011610102578063e19a9dd911610095578063f08a032311610064578063f08a032314611647578063f698da2514611698578063f8dc5dd9146116c3578063ffa1ad741461173e57610231565b8063e19a9dd91461139b578063e318b52b146113ec578063e75235b81461147d578063e86637db146114a857610231565b8063cc2f8452116100d1578063cc2f8452146110e8578063d4d9bdcd146111b5578063d8d11f78146111f0578063e009cfde1461132a57610231565b8063affed0e014610d94578063b4faba0914610dbf578063b63e800d14610ea7578063c4ca3a9c1461101757610231565b80635624b25b1161017a5780636a761202116101495780636a761202146109945780637d83297414610b50578063934f3a1114610bbf578063a0e67e2b14610d2857610231565b80635624b25b146107fb5780635ae6bd37146108b9578063610b592514610908578063694e80c31461095957610231565b80632f54bf6e116101b65780632f54bf6e146104d35780633408e4701461053a578063468721a7146105655780635229073f1461067a57610231565b80630d582f131461029e57806312fb68e0146102f95780632d9ad53d1461046c57610231565b36610231573373ffffffffffffffffffffffffffffffffffffffff167f3d0ce9bfc3ed7d6862dbb28b2dea94561fe714a1b4d019aa8af39730d1ad7c3d346040518082815260200191505060405180910390a2005b34801561023d57600080fd5b5060007f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d560001b905080548061027257600080f35b36600080373360601b365260008060143601600080855af13d6000803e80610299573d6000fd5b3d6000f35b3480156102aa57600080fd5b506102f7600480360360408110156102c157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506117ce565b005b34801561030557600080fd5b5061046a6004803603608081101561031c57600080fd5b81019080803590602001909291908035906020019064010000000081111561034357600080fd5b82018360208201111561035557600080fd5b8035906020019184600183028401116401000000008311171561037757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156103da57600080fd5b8201836020820111156103ec57600080fd5b8035906020019184600183028401116401000000008311171561040e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050611bbe565b005b34801561047857600080fd5b506104bb6004803603602081101561048f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612440565b60405180821515815260200191505060405180910390f35b3480156104df57600080fd5b50610522600480360360208110156104f657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612512565b60405180821515815260200191505060405180910390f35b34801561054657600080fd5b5061054f6125e4565b6040518082815260200191505060405180910390f35b34801561057157600080fd5b506106626004803603608081101561058857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156105cf57600080fd5b8201836020820111156105e157600080fd5b8035906020019184600183028401116401000000008311171561060357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803560ff1690602001909291905050506125f1565b60405180821515815260200191505060405180910390f35b34801561068657600080fd5b506107776004803603608081101561069d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156106e457600080fd5b8201836020820111156106f657600080fd5b8035906020019184600183028401116401000000008311171561071857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803560ff1690602001909291905050506127d7565b60405180831515815260200180602001828103825283818151815260200191508051906020019080838360005b838110156107bf5780820151818401526020810190506107a4565b50505050905090810190601f1680156107ec5780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b34801561080757600080fd5b5061083e6004803603604081101561081e57600080fd5b81019080803590602001909291908035906020019092919050505061280d565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561087e578082015181840152602081019050610863565b50505050905090810190601f1680156108ab5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156108c557600080fd5b506108f2600480360360208110156108dc57600080fd5b8101908080359060200190929190505050612894565b6040518082815260200191505060405180910390f35b34801561091457600080fd5b506109576004803603602081101561092b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506128ac565b005b34801561096557600080fd5b506109926004803603602081101561097c57600080fd5b8101908080359060200190929190505050612c3e565b005b610b3860048036036101408110156109ab57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156109f257600080fd5b820183602082011115610a0457600080fd5b80359060200191846001830284011164010000000083111715610a2657600080fd5b9091929391929390803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610ab257600080fd5b820183602082011115610ac457600080fd5b80359060200191846001830284011164010000000083111715610ae657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612d78565b60405180821515815260200191505060405180910390f35b348015610b5c57600080fd5b50610ba960048036036040811015610b7357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506132b5565b6040518082815260200191505060405180910390f35b348015610bcb57600080fd5b50610d2660048036036060811015610be257600080fd5b810190808035906020019092919080359060200190640100000000811115610c0957600080fd5b820183602082011115610c1b57600080fd5b80359060200191846001830284011164010000000083111715610c3d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610ca057600080fd5b820183602082011115610cb257600080fd5b80359060200191846001830284011164010000000083111715610cd457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506132da565b005b348015610d3457600080fd5b50610d3d613369565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610d80578082015181840152602081019050610d65565b505050509050019250505060405180910390f35b348015610da057600080fd5b50610da9613512565b6040518082815260200191505060405180910390f35b348015610dcb57600080fd5b50610ea560048036036040811015610de257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610e1f57600080fd5b820183602082011115610e3157600080fd5b80359060200191846001830284011164010000000083111715610e5357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050613518565b005b348015610eb357600080fd5b506110156004803603610100811015610ecb57600080fd5b8101908080359060200190640100000000811115610ee857600080fd5b820183602082011115610efa57600080fd5b80359060200191846020830284011164010000000083111715610f1c57600080fd5b909192939192939080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610f6757600080fd5b820183602082011115610f7957600080fd5b80359060200191846001830284011164010000000083111715610f9b57600080fd5b9091929391929390803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061353a565b005b34801561102357600080fd5b506110d26004803603608081101561103a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561108157600080fd5b82018360208201111561109357600080fd5b803590602001918460018302840111640100000000831117156110b557600080fd5b9091929391929390803560ff1690602001909291905050506136f8565b6040518082815260200191505060405180910390f35b3480156110f457600080fd5b506111416004803603604081101561110b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613820565b60405180806020018373ffffffffffffffffffffffffffffffffffffffff168152602001828103825284818151815260200191508051906020019060200280838360005b838110156111a0578082015181840152602081019050611185565b50505050905001935050505060405180910390f35b3480156111c157600080fd5b506111ee600480360360208110156111d857600080fd5b8101908080359060200190929190505050613a12565b005b3480156111fc57600080fd5b50611314600480360361014081101561121457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561125b57600080fd5b82018360208201111561126d57600080fd5b8035906020019184600183028401116401000000008311171561128f57600080fd5b9091929391929390803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613bb1565b6040518082815260200191505060405180910390f35b34801561133657600080fd5b506113996004803603604081101561134d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613bde565b005b3480156113a757600080fd5b506113ea600480360360208110156113be57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613f6f565b005b3480156113f857600080fd5b5061147b6004803603606081101561140f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613ff3565b005b34801561148957600080fd5b50611492614665565b6040518082815260200191505060405180910390f35b3480156114b457600080fd5b506115cc60048036036101408110156114cc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561151357600080fd5b82018360208201111561152557600080fd5b8035906020019184600183028401116401000000008311171561154757600080fd5b9091929391929390803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061466f565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561160c5780820151818401526020810190506115f1565b50505050905090810190601f1680156116395780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561165357600080fd5b506116966004803603602081101561166a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614817565b005b3480156116a457600080fd5b506116ad614878565b6040518082815260200191505060405180910390f35b3480156116cf57600080fd5b5061173c600480360360608110156116e657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506148f6565b005b34801561174a57600080fd5b50611753614d29565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015611793578082015181840152602081019050611778565b50505050905090810190601f1680156117c05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6117d6614d62565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156118405750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561187857503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b6118ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60026000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160026000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506003600081548092919060010191905055507f9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea2682604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a18060045414611bba57611bb981612c3e565b5b5050565b611bd2604182614e0590919063ffffffff16565b82511015611c48576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000808060008060005b8681101561243457611c648882614e3f565b80945081955082965050505060008460ff16141561206d578260001c9450611c96604188614e0590919063ffffffff16565b8260001c1015611d0e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8751611d2760208460001c614e6e90919063ffffffff16565b1115611d9b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60006020838a01015190508851611dd182611dc360208760001c614e6e90919063ffffffff16565b614e6e90919063ffffffff16565b1115611e45576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60606020848b010190506320c13b0b60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168773ffffffffffffffffffffffffffffffffffffffff166320c13b0b8d846040518363ffffffff1660e01b8152600401808060200180602001838103835285818151815260200191508051906020019080838360005b83811015611ee7578082015181840152602081019050611ecc565b50505050905090810190601f168015611f145780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015611f4d578082015181840152602081019050611f32565b50505050905090810190601f168015611f7a5780820380516001836020036101000a031916815260200191505b5094505050505060206040518083038186803b158015611f9957600080fd5b505afa158015611fad573d6000803e3d6000fd5b505050506040513d6020811015611fc357600080fd5b81019080805190602001909291905050507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612066576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b50506122b2565b60018460ff161415612181578260001c94508473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061210a57506000600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008c81526020019081526020016000205414155b61217c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323500000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6122b1565b601e8460ff1611156122495760018a60405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c018281526020019150506040516020818303038152906040528051906020012060048603858560405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612238573d6000803e3d6000fd5b5050506020604051035194506122b0565b60018a85858560405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156122a3573d6000803e3d6000fd5b5050506020604051035194505b5b5b8573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161180156123795750600073ffffffffffffffffffffffffffffffffffffffff16600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b80156123b25750600173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b612424576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323600000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8495508080600101915050611c52565b50505050505050505050565b60008173ffffffffffffffffffffffffffffffffffffffff16600173ffffffffffffffffffffffffffffffffffffffff161415801561250b5750600073ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b6000600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156125dd5750600073ffffffffffffffffffffffffffffffffffffffff16600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b6000804690508091505090565b6000600173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156126bc5750600073ffffffffffffffffffffffffffffffffffffffff16600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b61272e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b61273b858585855a614e8d565b9050801561278b573373ffffffffffffffffffffffffffffffffffffffff167f6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb860405160405180910390a26127cf565b3373ffffffffffffffffffffffffffffffffffffffff167facd2c8702804128fdb0db2bb49f6d127dd0181c13fd45dbfe16de0930e2bd37560405160405180910390a25b949350505050565b600060606127e7868686866125f1565b915060405160203d0181016040523d81523d6000602083013e8091505094509492505050565b606060006020830267ffffffffffffffff8111801561282b57600080fd5b506040519080825280601f01601f19166020018201604052801561285e5781602001600182028036833780820191505090505b50905060005b8381101561288957808501548060208302602085010152508080600101915050612864565b508091505092915050565b60076020528060005260406000206000915090505481565b6128b4614d62565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415801561291e5750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b612990576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a91576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f844081604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b612c46614d62565b600354811115612cbe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001811015612d35576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b806004819055507f610f7ff2b304ae8903c3de74c60c6ab1f7d6226b3f52c5161905bb5ad4039c936004546040518082815260200191505060405180910390a150565b6000806000612d928e8e8e8e8e8e8e8e8e8e60055461466f565b905060056000815480929190600101919050555080805190602001209150612dbb8282866132da565b506000612dc6614ed9565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612fac578073ffffffffffffffffffffffffffffffffffffffff166375f0bb528f8f8f8f8f8f8f8f8f8f8f336040518d63ffffffff1660e01b8152600401808d73ffffffffffffffffffffffffffffffffffffffff1681526020018c8152602001806020018a6001811115612e6957fe5b81526020018981526020018881526020018781526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff168152602001806020018473ffffffffffffffffffffffffffffffffffffffff16815260200183810383528d8d82818152602001925080828437600081840152601f19601f820116905080830192505050838103825285818151815260200191508051906020019080838360005b83811015612f3b578082015181840152602081019050612f20565b50505050905090810190601f168015612f685780820380516001836020036101000a031916815260200191505b509e505050505050505050505050505050600060405180830381600087803b158015612f9357600080fd5b505af1158015612fa7573d6000803e3d6000fd5b505050505b6101f4612fd36109c48b01603f60408d0281612fc457fe5b04614f0a90919063ffffffff16565b015a1015613049576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60005a90506130b28f8f8f8f8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508e60008d146130a7578e6130ad565b6109c45a035b614e8d565b93506130c75a82614f2490919063ffffffff16565b905083806130d6575060008a14155b806130e2575060008814155b613154576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60008089111561316e5761316b828b8b8b8b614f44565b90505b84156131b8577f442e715f626346e8c54381002da614f62bee8d27386535b2521ec8540898556e8482604051808381526020018281526020019250505060405180910390a16131f8565b7f23428b18acfb3ea64b08dc0c1d296ea9c09702c09083ca5272e64d115b687d238482604051808381526020018281526020019250505060405180910390a15b5050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146132a4578073ffffffffffffffffffffffffffffffffffffffff16639327136883856040518363ffffffff1660e01b815260040180838152602001821515815260200192505050600060405180830381600087803b15801561328b57600080fd5b505af115801561329f573d6000803e3d6000fd5b505050505b50509b9a5050505050505050505050565b6008602052816000526040600020602052806000526040600020600091509150505481565b6000600454905060008111613357576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b61336384848484611bbe565b50505050565b6060600060035467ffffffffffffffff8111801561338657600080fd5b506040519080825280602002602001820160405280156133b55781602001602082028036833780820191505090505b50905060008060026000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614613509578083838151811061346057fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050818060010192505061341f565b82935050505090565b60055481565b600080825160208401855af4806000523d6020523d600060403e60403d016000fd5b6135858a8a80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508961514a565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146135c3576135c28461564a565b5b6136118787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050615679565b600082111561362b5761362982600060018685614f44565b505b3373ffffffffffffffffffffffffffffffffffffffff167f141df868a6331af528e38c83b7aa03edc19be66e37ae67f9285bf4f8e3c6a1a88b8b8b8b8960405180806020018581526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281038252878782818152602001925060200280828437600081840152601f19601f820116905080830192505050965050505050505060405180910390a250505050505050505050565b6000805a905061374f878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050865a614e8d565b61375857600080fd5b60005a8203905080604051602001808281526020019150506040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156137e55780820151818401526020810190506137ca565b50505050905090810190601f1680156138125780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b606060008267ffffffffffffffff8111801561383b57600080fd5b5060405190808252806020026020018201604052801561386a5781602001602082028036833780820191505090505b509150600080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415801561393d5750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561394857508482105b15613a03578084838151811061395a57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081806001019250506138d3565b80925081845250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff16600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415613b14576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330333000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16817ff2a0eb156472d1440255b0d7c1e19cc07115d1051fe605b0dce69acfec884d9c60405160405180910390a350565b6000613bc68c8c8c8c8c8c8c8c8c8c8c61466f565b8051906020012090509b9a5050505050505050505050565b613be6614d62565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015613c505750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b613cc2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613dc2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507faab4fa2b463f581b2b32cb3b7e3b704b9ce37cc209b5fb4d77e593ace405427681604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b613f77614d62565b60007f4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c860001b90508181557f1151116914515bc0891ff9047a6cb32cf902546f83066499bcf8ba33d2353fa282604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b613ffb614d62565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156140655750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561409d57503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b61410f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614614210576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561427a5750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b6142ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146143ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303500000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507ff8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf82604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a17f9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea2681604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1505050565b6000600454905090565b606060007fbb8310d486368db6bd6f849402fdd73ad53d316b5a4b2644ad6efe0f941286d860001b8d8d8d8d60405180838380828437808301925050509250505060405180910390208c8c8c8c8c8c8c604051602001808c81526020018b73ffffffffffffffffffffffffffffffffffffffff1681526020018a815260200189815260200188600181111561470057fe5b81526020018781526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019b505050505050505050505050604051602081830303815290604052805190602001209050601960f81b600160f81b61478c614878565b8360405160200180857effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152600101847effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018381526020018281526020019450505050506040516020818303038152906040529150509b9a5050505050505050505050565b61481f614d62565b6148288161564a565b7f5ac6c46c93c8d0e53714ba3b53db3e7c046da994313d7ed0d192028bc7c228b081604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b60007f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a7946921860001b6148a66125e4565b30604051602001808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405160208183030381529060405280519060200120905090565b6148fe614d62565b806001600354031015614979576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156149e35750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b614a55576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614614b55576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303500000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360008154809291906001900391905055507ff8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf82604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a18060045414614d2457614d2381612c3e565b5b505050565b6040518060400160405280600581526020017f312e332e3000000000000000000000000000000000000000000000000000000081525081565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614614e03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330333100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b565b600080831415614e185760009050614e39565b6000828402905082848281614e2957fe5b0414614e3457600080fd5b809150505b92915050565b60008060008360410260208101860151925060408101860151915060ff60418201870151169350509250925092565b600080828401905083811015614e8357600080fd5b8091505092915050565b6000600180811115614e9b57fe5b836001811115614ea757fe5b1415614ec0576000808551602087018986f49050614ed0565b600080855160208701888a87f190505b95945050505050565b6000807f4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c860001b9050805491505090565b600081831015614f1a5781614f1c565b825b905092915050565b600082821115614f3357600080fd5b600082840390508091505092915050565b600080600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614614f815782614f83565b325b9050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561509b57614fed3a8610614fca573a614fcc565b855b614fdf888a614e6e90919063ffffffff16565b614e0590919063ffffffff16565b91508073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050615096576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b615140565b6150c0856150b2888a614e6e90919063ffffffff16565b614e0590919063ffffffff16565b91506150cd8482846158b4565b61513f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b5b5095945050505050565b6000600454146151c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8151811115615239576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60018110156152b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60006001905060005b83518110156155b65760008482815181106152d057fe5b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156153445750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561537c57503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b80156153b457508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b615426576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614615527576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508092505080806001019150506152b9565b506001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550825160038190555081600481905550505050565b60007f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d560001b90508181555050565b600073ffffffffffffffffffffffffffffffffffffffff1660016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461577b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001806000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146158b05761583d8260008360015a614e8d565b6158af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330303000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b5b5050565b60008063a9059cbb8484604051602401808373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001925050506040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050602060008251602084016000896127105a03f13d6000811461595b5760208114615963576000935061596e565b81935061596e565b600051158215171593505b505050939250505056fea26469706673582212203874bcf92e1722cc7bfa0cef1a0985cf0dc3485ba0663db3747ccdf1605df53464736f6c6343000706003360806040526004361061018a5760003560e01c806381503da1116100d6578063d323826a1161007f578063e96deee411610059578063e96deee414610395578063f5745aba146103a8578063f9664498146103bb57600080fd5b8063d323826a1461034f578063ddda0acb1461036f578063e437252a1461038257600080fd5b80639c36a286116100b05780639c36a28614610316578063a7db93f214610329578063c3fe107b1461033c57600080fd5b806381503da1146102d0578063890c283b146102e357806398e810771461030357600080fd5b80632f990e3f116101385780636cec2536116101125780636cec25361461027d57806374637a7a1461029d5780637f565360146102bd57600080fd5b80632f990e3f1461023757806331a7c8c81461024a57806342d654fc1461025d57600080fd5b806327fe18221161016957806327fe1822146101f15780632852527a1461020457806328ddd0461461021757600080fd5b8062d84acb1461018f57806326307668146101cb57806326a32fc7146101de575b600080fd5b6101a261019d366004612915565b6103ce565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6101a26101d9366004612994565b6103e6565b6101a26101ec3660046129db565b610452565b6101a26101ff3660046129db565b6104de565b6101a2610212366004612a39565b610539565b34801561022357600080fd5b506101a2610232366004612a90565b6106fe565b6101a2610245366004612aa9565b61072a565b6101a2610258366004612aa9565b6107bb565b34801561026957600080fd5b506101a2610278366004612b1e565b6107c9565b34801561028957600080fd5b506101a2610298366004612a90565b610823565b3480156102a957600080fd5b506101a26102b8366004612b4a565b61084f565b6101a26102cb3660046129db565b611162565b6101a26102de366004612b74565b6111e8565b3480156102ef57600080fd5b506101a26102fe366004612bac565b611276565b6101a2610311366004612bce565b6112a3565b6101a2610324366004612994565b611505565b6101a2610337366004612c49565b6116f1565b6101a261034a366004612aa9565b611964565b34801561035b57600080fd5b506101a261036a366004612cd9565b6119ed565b6101a261037d366004612c49565b611a17565b6101a2610390366004612bce565b611e0c565b6101a26103a3366004612915565b611e95565b6101a26103b6366004612bce565b611ea4565b6101a26103c9366004612b74565b611f2d565b60006103dd8585858533611a17565b95945050505050565b6000806103f2846120db565b90508083516020850134f59150610408826123d3565b604051819073ffffffffffffffffffffffffffffffffffffffff8416907fb8fda7e00c6b06a2b54e58521bc5894fee35f1090e5a3bb6390bfe2b98b497f790600090a35092915050565b60006104d86104d260408051437fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101406020830152419282019290925260608101919091524260808201524460a08201524660c08201523360e08201526000906101000160405160208183030381529060405280519060200120905090565b836103e6565b92915050565b600081516020830134f090506104f3816123d3565b60405173ffffffffffffffffffffffffffffffffffffffff8216907f4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b51190600090a2919050565b600080610545856120db565b905060008460601b90506040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528160148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f593505073ffffffffffffffffffffffffffffffffffffffff8316610635576040517fc05cee7a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ba5ed099633d3b313e4d5f7bdc1305d3c28ba5ed1660048201526024015b60405180910390fd5b604051829073ffffffffffffffffffffffffffffffffffffffff8516907fb8fda7e00c6b06a2b54e58521bc5894fee35f1090e5a3bb6390bfe2b98b497f790600090a36000808473ffffffffffffffffffffffffffffffffffffffff1634876040516106a19190612d29565b60006040518083038185875af1925050503d80600081146106de576040519150601f19603f3d011682016040523d82523d6000602084013e6106e3565b606091505b50915091506106f382828961247d565b505050509392505050565b60006104d87f000000000000000000000000ba5ed099633d3b313e4d5f7bdc1305d3c28ba5ed8361084f565b60006107b36107aa60408051437fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101406020830152419282019290925260608101919091524260808201524460a08201524660c08201523360e08201526000906101000160405160208183030381529060405280519060200120905090565b85858533611a17565b949350505050565b60006107b3848484336112a3565b60006040518260005260ff600b53836020527f21c35dbe1b344a2488cf3321d6ce542f8e9f305544ff09e4993a62319a497c1f6040526055600b20601452806040525061d694600052600160345350506017601e20919050565b60006104d8827f000000000000000000000000ba5ed099633d3b313e4d5f7bdc1305d3c28ba5ed6107c9565b600060607f9400000000000000000000000000000000000000000000000000000000000000610887600167ffffffffffffffff612d45565b67ffffffffffffffff16841115610902576040517f3c55ab3b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ba5ed099633d3b313e4d5f7bdc1305d3c28ba5ed16600482015260240161062c565b836000036109c7576040517fd60000000000000000000000000000000000000000000000000000000000000060208201527fff00000000000000000000000000000000000000000000000000000000000000821660218201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b1660228201527f800000000000000000000000000000000000000000000000000000000000000060368201526037015b6040516020818303038152906040529150611152565b607f8411610a60576040517fd60000000000000000000000000000000000000000000000000000000000000060208201527fff0000000000000000000000000000000000000000000000000000000000000080831660218301527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606088901b16602283015260f886901b1660368201526037016109b1565b60ff8411610b1f576040517fd70000000000000000000000000000000000000000000000000000000000000060208201527fff0000000000000000000000000000000000000000000000000000000000000080831660218301527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606088901b1660228301527f8100000000000000000000000000000000000000000000000000000000000000603683015260f886901b1660378201526038016109b1565b61ffff8411610bff576040517fd80000000000000000000000000000000000000000000000000000000000000060208201527fff00000000000000000000000000000000000000000000000000000000000000821660218201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b1660228201527f820000000000000000000000000000000000000000000000000000000000000060368201527fffff00000000000000000000000000000000000000000000000000000000000060f086901b1660378201526039016109b1565b62ffffff8411610ce0576040517fd90000000000000000000000000000000000000000000000000000000000000060208201527fff00000000000000000000000000000000000000000000000000000000000000821660218201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b1660228201527f830000000000000000000000000000000000000000000000000000000000000060368201527fffffff000000000000000000000000000000000000000000000000000000000060e886901b166037820152603a016109b1565b63ffffffff8411610dc2576040517fda0000000000000000000000000000000000000000000000000000000000000060208201527fff00000000000000000000000000000000000000000000000000000000000000821660218201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b1660228201527f840000000000000000000000000000000000000000000000000000000000000060368201527fffffffff0000000000000000000000000000000000000000000000000000000060e086901b166037820152603b016109b1565b64ffffffffff8411610ea5576040517fdb0000000000000000000000000000000000000000000000000000000000000060208201527fff00000000000000000000000000000000000000000000000000000000000000821660218201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b1660228201527f850000000000000000000000000000000000000000000000000000000000000060368201527fffffffffff00000000000000000000000000000000000000000000000000000060d886901b166037820152603c016109b1565b65ffffffffffff8411610f89576040517fdc0000000000000000000000000000000000000000000000000000000000000060208201527fff00000000000000000000000000000000000000000000000000000000000000821660218201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b1660228201527f860000000000000000000000000000000000000000000000000000000000000060368201527fffffffffffff000000000000000000000000000000000000000000000000000060d086901b166037820152603d016109b1565b66ffffffffffffff841161106e576040517fdd0000000000000000000000000000000000000000000000000000000000000060208201527fff00000000000000000000000000000000000000000000000000000000000000821660218201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b1660228201527f870000000000000000000000000000000000000000000000000000000000000060368201527fffffffffffffff0000000000000000000000000000000000000000000000000060c886901b166037820152603e016109b1565b6040517fde0000000000000000000000000000000000000000000000000000000000000060208201527fff00000000000000000000000000000000000000000000000000000000000000821660218201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b1660228201527f880000000000000000000000000000000000000000000000000000000000000060368201527fffffffffffffffff00000000000000000000000000000000000000000000000060c086901b166037820152603f0160405160208183030381529060405291505b5080516020909101209392505050565b60006104d86111e260408051437fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101406020830152419282019290925260608101919091524260808201524460a08201524660c08201523360e08201526000906101000160405160208183030381529060405280519060200120905090565b83611505565b600061126f61126860408051437fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101406020830152419282019290925260608101919091524260808201524460a08201524660c08201523360e08201526000906101000160405160208183030381529060405280519060200120905090565b8484610539565b9392505050565b600061126f83837f000000000000000000000000ba5ed099633d3b313e4d5f7bdc1305d3c28ba5ed6119ed565b60008451602086018451f090506112b9816123d3565b60405173ffffffffffffffffffffffffffffffffffffffff8216907f4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b51190600090a26000808273ffffffffffffffffffffffffffffffffffffffff168560200151876040516113279190612d29565b60006040518083038185875af1925050503d8060008114611364576040519150601f19603f3d011682016040523d82523d6000602084013e611369565b606091505b5091509150816113c9577f000000000000000000000000ba5ed099633d3b313e4d5f7bdc1305d3c28ba5ed816040517fa57ca23900000000000000000000000000000000000000000000000000000000815260040161062c929190612d94565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ba5ed099633d3b313e4d5f7bdc1305d3c28ba5ed1631156114fb578373ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000ba5ed099633d3b313e4d5f7bdc1305d3c28ba5ed73ffffffffffffffffffffffffffffffffffffffff163160405160006040518083038185875af1925050503d8060008114611495576040519150601f19603f3d011682016040523d82523d6000602084013e61149a565b606091505b509092509050816114fb577f000000000000000000000000ba5ed099633d3b313e4d5f7bdc1305d3c28ba5ed816040517fc2b3f44500000000000000000000000000000000000000000000000000000000815260040161062c929190612d94565b5050949350505050565b600080611511846120db565b905060006040518060400160405280601081526020017f67363d3d37363d34f03d5260086018f30000000000000000000000000000000081525090506000828251602084016000f5905073ffffffffffffffffffffffffffffffffffffffff81166115e0576040517fc05cee7a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ba5ed099633d3b313e4d5f7bdc1305d3c28ba5ed16600482015260240161062c565b604051839073ffffffffffffffffffffffffffffffffffffffff8316907f2feea65dd4e9f9cbd86b74b7734210c59a1b2981b5b137bd0ee3e208200c906790600090a361162c83610823565b935060008173ffffffffffffffffffffffffffffffffffffffff1634876040516116569190612d29565b60006040518083038185875af1925050503d8060008114611693576040519150601f19603f3d011682016040523d82523d6000602084013e611698565b606091505b505090506116a681866124ff565b60405173ffffffffffffffffffffffffffffffffffffffff8616907f4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b51190600090a25050505092915050565b6000806116fd876120db565b9050808651602088018651f59150611714826123d3565b604051819073ffffffffffffffffffffffffffffffffffffffff8416907fb8fda7e00c6b06a2b54e58521bc5894fee35f1090e5a3bb6390bfe2b98b497f790600090a36000808373ffffffffffffffffffffffffffffffffffffffff168660200151886040516117849190612d29565b60006040518083038185875af1925050503d80600081146117c1576040519150601f19603f3d011682016040523d82523d6000602084013e6117c6565b606091505b509150915081611826577f000000000000000000000000ba5ed099633d3b313e4d5f7bdc1305d3c28ba5ed816040517fa57ca23900000000000000000000000000000000000000000000000000000000815260040161062c929190612d94565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ba5ed099633d3b313e4d5f7bdc1305d3c28ba5ed163115611958578473ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000ba5ed099633d3b313e4d5f7bdc1305d3c28ba5ed73ffffffffffffffffffffffffffffffffffffffff163160405160006040518083038185875af1925050503d80600081146118f2576040519150601f19603f3d011682016040523d82523d6000602084013e6118f7565b606091505b50909250905081611958577f000000000000000000000000ba5ed099633d3b313e4d5f7bdc1305d3c28ba5ed816040517fc2b3f44500000000000000000000000000000000000000000000000000000000815260040161062c929190612d94565b50505095945050505050565b60006107b36119e460408051437fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101406020830152419282019290925260608101919091524260808201524460a08201524660c08201523360e08201526000906101000160405160208183030381529060405280519060200120905090565b858585336116f1565b6000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b600080611a23876120db565b905060006040518060400160405280601081526020017f67363d3d37363d34f03d5260086018f30000000000000000000000000000000081525090506000828251602084016000f5905073ffffffffffffffffffffffffffffffffffffffff8116611af2576040517fc05cee7a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ba5ed099633d3b313e4d5f7bdc1305d3c28ba5ed16600482015260240161062c565b604051839073ffffffffffffffffffffffffffffffffffffffff8316907f2feea65dd4e9f9cbd86b74b7734210c59a1b2981b5b137bd0ee3e208200c906790600090a3611b3e83610823565b935060008173ffffffffffffffffffffffffffffffffffffffff1687600001518a604051611b6c9190612d29565b60006040518083038185875af1925050503d8060008114611ba9576040519150601f19603f3d011682016040523d82523d6000602084013e611bae565b606091505b50509050611bbc81866124ff565b60405173ffffffffffffffffffffffffffffffffffffffff8616907f4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b51190600090a260608573ffffffffffffffffffffffffffffffffffffffff1688602001518a604051611c299190612d29565b60006040518083038185875af1925050503d8060008114611c66576040519150601f19603f3d011682016040523d82523d6000602084013e611c6b565b606091505b50909250905081611ccc577f000000000000000000000000ba5ed099633d3b313e4d5f7bdc1305d3c28ba5ed816040517fa57ca23900000000000000000000000000000000000000000000000000000000815260040161062c929190612d94565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ba5ed099633d3b313e4d5f7bdc1305d3c28ba5ed163115611dfe578673ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000ba5ed099633d3b313e4d5f7bdc1305d3c28ba5ed73ffffffffffffffffffffffffffffffffffffffff163160405160006040518083038185875af1925050503d8060008114611d98576040519150601f19603f3d011682016040523d82523d6000602084013e611d9d565b606091505b50909250905081611dfe577f000000000000000000000000ba5ed099633d3b313e4d5f7bdc1305d3c28ba5ed816040517fc2b3f44500000000000000000000000000000000000000000000000000000000815260040161062c929190612d94565b505050505095945050505050565b60006103dd611e8c60408051437fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101406020830152419282019290925260608101919091524260808201524460a08201524660c08201523360e08201526000906101000160405160208183030381529060405280519060200120905090565b868686866116f1565b60006103dd85858585336116f1565b60006103dd611f2460408051437fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101406020830152419282019290925260608101919091524260808201524460a08201524660c08201523360e08201526000906101000160405160208183030381529060405280519060200120905090565b86868686611a17565b6000808360601b90506040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528160148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f092505073ffffffffffffffffffffffffffffffffffffffff8216612016576040517fc05cee7a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ba5ed099633d3b313e4d5f7bdc1305d3c28ba5ed16600482015260240161062c565b60405173ffffffffffffffffffffffffffffffffffffffff8316907f4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b51190600090a26000808373ffffffffffffffffffffffffffffffffffffffff1634866040516120809190612d29565b60006040518083038185875af1925050503d80600081146120bd576040519150601f19603f3d011682016040523d82523d6000602084013e6120c2565b606091505b50915091506120d282828861247d565b50505092915050565b60008060006120e9846125b3565b9092509050600082600281111561210257612102612e02565b1480156121205750600081600281111561211e5761211e612e02565b145b1561215e57604080513360208201524691810191909152606081018590526080016040516020818303038152906040528051906020012092506123cc565b600082600281111561217257612172612e02565b1480156121905750600181600281111561218e5761218e612e02565b145b156121b0576121a9338560009182526020526040902090565b92506123cc565b60008260028111156121c4576121c4612e02565b03612233576040517f13b3a2a100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ba5ed099633d3b313e4d5f7bdc1305d3c28ba5ed16600482015260240161062c565b600182600281111561224757612247612e02565b1480156122655750600081600281111561226357612263612e02565b145b1561227e576121a9468560009182526020526040902090565b600182600281111561229257612292612e02565b1480156122b0575060028160028111156122ae576122ae612e02565b145b1561231f576040517f13b3a2a100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ba5ed099633d3b313e4d5f7bdc1305d3c28ba5ed16600482015260240161062c565b61239a60408051437fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101406020830152419282019290925260608101919091524260808201524460a08201524660c08201523360e08201526000906101000160405160208183030381529060405280519060200120905090565b84036123a657836123c9565b604080516020810186905201604051602081830303815290604052805190602001205b92505b5050919050565b73ffffffffffffffffffffffffffffffffffffffff8116158061240b575073ffffffffffffffffffffffffffffffffffffffff81163b155b1561247a576040517fc05cee7a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ba5ed099633d3b313e4d5f7bdc1305d3c28ba5ed16600482015260240161062c565b50565b82158061249f575073ffffffffffffffffffffffffffffffffffffffff81163b155b156124fa577f000000000000000000000000ba5ed099633d3b313e4d5f7bdc1305d3c28ba5ed826040517fa57ca23900000000000000000000000000000000000000000000000000000000815260040161062c929190612d94565b505050565b811580612520575073ffffffffffffffffffffffffffffffffffffffff8116155b80612540575073ffffffffffffffffffffffffffffffffffffffff81163b155b156125af576040517fc05cee7a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ba5ed099633d3b313e4d5f7bdc1305d3c28ba5ed16600482015260240161062c565b5050565b600080606083901c3314801561261057508260141a60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f0100000000000000000000000000000000000000000000000000000000000000145b1561262057506000905080915091565b606083901c3314801561265a57507fff00000000000000000000000000000000000000000000000000000000000000601484901a60f81b16155b1561266b5750600090506001915091565b33606084901c036126825750600090506002915091565b606083901c1580156126db57508260141a60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f0100000000000000000000000000000000000000000000000000000000000000145b156126ec5750600190506000915091565b606083901c15801561272557507fff00000000000000000000000000000000000000000000000000000000000000601484901a60f81b16155b1561273557506001905080915091565b606083901c61274a5750600190506002915091565b8260141a60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f0100000000000000000000000000000000000000000000000000000000000000036127a55750600290506000915091565b8260141a60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166000036127e15750600290506001915091565b506002905080915091565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261282c57600080fd5b813567ffffffffffffffff80821115612847576128476127ec565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561288d5761288d6127ec565b816040528381528660208588010111156128a657600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000604082840312156128d857600080fd5b6040516040810181811067ffffffffffffffff821117156128fb576128fb6127ec565b604052823581526020928301359281019290925250919050565b60008060008060a0858703121561292b57600080fd5b84359350602085013567ffffffffffffffff8082111561294a57600080fd5b6129568883890161281b565b9450604087013591508082111561296c57600080fd5b506129798782880161281b565b92505061298986606087016128c6565b905092959194509250565b600080604083850312156129a757600080fd5b82359150602083013567ffffffffffffffff8111156129c557600080fd5b6129d18582860161281b565b9150509250929050565b6000602082840312156129ed57600080fd5b813567ffffffffffffffff811115612a0457600080fd5b6107b38482850161281b565b803573ffffffffffffffffffffffffffffffffffffffff81168114612a3457600080fd5b919050565b600080600060608486031215612a4e57600080fd5b83359250612a5e60208501612a10565b9150604084013567ffffffffffffffff811115612a7a57600080fd5b612a868682870161281b565b9150509250925092565b600060208284031215612aa257600080fd5b5035919050565b600080600060808486031215612abe57600080fd5b833567ffffffffffffffff80821115612ad657600080fd5b612ae28783880161281b565b94506020860135915080821115612af857600080fd5b50612b058682870161281b565b925050612b1585604086016128c6565b90509250925092565b60008060408385031215612b3157600080fd5b82359150612b4160208401612a10565b90509250929050565b60008060408385031215612b5d57600080fd5b612b6683612a10565b946020939093013593505050565b60008060408385031215612b8757600080fd5b612b9083612a10565b9150602083013567ffffffffffffffff8111156129c557600080fd5b60008060408385031215612bbf57600080fd5b50508035926020909101359150565b60008060008060a08587031215612be457600080fd5b843567ffffffffffffffff80821115612bfc57600080fd5b612c088883890161281b565b95506020870135915080821115612c1e57600080fd5b50612c2b8782880161281b565b935050612c3b86604087016128c6565b915061298960808601612a10565b600080600080600060c08688031215612c6157600080fd5b85359450602086013567ffffffffffffffff80821115612c8057600080fd5b612c8c89838a0161281b565b95506040880135915080821115612ca257600080fd5b50612caf8882890161281b565b935050612cbf87606088016128c6565b9150612ccd60a08701612a10565b90509295509295909350565b600080600060608486031215612cee57600080fd5b8335925060208401359150612b1560408501612a10565b60005b83811015612d20578181015183820152602001612d08565b50506000910152565b60008251612d3b818460208701612d05565b9190910192915050565b67ffffffffffffffff828116828216039080821115612d8d577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b5092915050565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015260008251806040840152612dcf816060850160208701612d05565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016060019392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c6343000817000a6040608081526004908136101561001557600080fd5b600090813560e01c80630d58b1db1461126c578063137c29fe146110755780632a2d80d114610db75780632b67b57014610bde57806330f28b7a14610ade5780633644e51514610a9d57806336c7851614610a285780633ff9dcb1146109a85780634fe02b441461093f57806365d9723c146107ac57806387517c451461067a578063927da105146105c3578063cc53287f146104a3578063edd9444b1461033a5763fe8ec1a7146100c657600080fd5b346103365760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103365767ffffffffffffffff833581811161033257610114903690860161164b565b60243582811161032e5761012b903690870161161a565b6101336114e6565b9160843585811161032a5761014b9036908a016115c1565b98909560a43590811161032657610164913691016115c1565b969095815190610173826113ff565b606b82527f5065726d697442617463685769746e6573735472616e7366657246726f6d285460208301527f6f6b656e5065726d697373696f6e735b5d207065726d69747465642c61646472838301527f657373207370656e6465722c75696e74323536206e6f6e63652c75696e74323560608301527f3620646561646c696e652c000000000000000000000000000000000000000000608083015282519a8b9181610222602085018096611f93565b918237018a8152039961025b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09b8c8101835282611437565b5190209085515161026b81611ebb565b908a5b8181106102f95750506102f6999a6102ed9183516102a081610294602082018095611f66565b03848101835282611437565b519020602089810151858b015195519182019687526040820192909252336060820152608081019190915260a081019390935260643560c08401528260e081015b03908101835282611437565b51902093611cf7565b80f35b8061031161030b610321938c5161175e565b51612054565b61031b828661175e565b52611f0a565b61026e565b8880fd5b8780fd5b8480fd5b8380fd5b5080fd5b5091346103365760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103365767ffffffffffffffff9080358281116103325761038b903690830161164b565b60243583811161032e576103a2903690840161161a565b9390926103ad6114e6565b9160643590811161049f576103c4913691016115c1565b949093835151976103d489611ebb565b98885b81811061047d5750506102f697988151610425816103f9602082018095611f66565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282611437565b5190206020860151828701519083519260208401947ffcf35f5ac6a2c28868dc44c302166470266239195f02b0ee408334829333b7668652840152336060840152608083015260a082015260a081526102ed8161141b565b808b61031b8261049461030b61049a968d5161175e565b9261175e565b6103d7565b8680fd5b5082346105bf57602090817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103325780359067ffffffffffffffff821161032e576104f49136910161161a565b929091845b848110610504578580f35b8061051a610515600193888861196c565b61197c565b61052f84610529848a8a61196c565b0161197c565b3389528385528589209173ffffffffffffffffffffffffffffffffffffffff80911692838b528652868a20911690818a5285528589207fffffffffffffffffffffffff000000000000000000000000000000000000000081541690558551918252848201527f89b1add15eff56b3dfe299ad94e01f2b52fbcb80ae1a3baea6ae8c04cb2b98a4853392a2016104f9565b8280fd5b50346103365760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261033657610676816105ff6114a0565b936106086114c3565b6106106114e6565b73ffffffffffffffffffffffffffffffffffffffff968716835260016020908152848420928816845291825283832090871683528152919020549251938316845260a083901c65ffffffffffff169084015260d09190911c604083015281906060820190565b0390f35b50346103365760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610336576106b26114a0565b906106bb6114c3565b916106c46114e6565b65ffffffffffff926064358481169081810361032a5779ffffffffffff0000000000000000000000000000000000000000947fda9fa7c1b00402c17d0161b249b1ab8bbec047c5a52207b9c112deffd817036b94338a5260016020527fffffffffffff0000000000000000000000000000000000000000000000000000858b209873ffffffffffffffffffffffffffffffffffffffff809416998a8d5260205283878d209b169a8b8d52602052868c209486156000146107a457504216925b8454921697889360a01b16911617179055815193845260208401523392a480f35b905092610783565b5082346105bf5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105bf576107e56114a0565b906107ee6114c3565b9265ffffffffffff604435818116939084810361032a57338852602091600183528489209673ffffffffffffffffffffffffffffffffffffffff80911697888b528452858a20981697888a5283528489205460d01c93848711156109175761ffff9085840316116108f05750907f55eb90d810e1700b35a8e7e25395ff7f2b2259abd7415ca2284dfb1c246418f393929133895260018252838920878a528252838920888a5282528389209079ffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffff000000000000000000000000000000000000000000000000000083549260d01b16911617905582519485528401523392a480f35b84517f24d35a26000000000000000000000000000000000000000000000000000000008152fd5b5084517f756688fe000000000000000000000000000000000000000000000000000000008152fd5b503461033657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610336578060209273ffffffffffffffffffffffffffffffffffffffff61098f6114a0565b1681528084528181206024358252845220549051908152f35b5082346105bf57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105bf577f3704902f963766a4e561bbaab6e6cdc1b1dd12f6e9e99648da8843b3f46b918d90359160243533855284602052818520848652602052818520818154179055815193845260208401523392a280f35b8234610a9a5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610a9a57610a606114a0565b610a686114c3565b610a706114e6565b6064359173ffffffffffffffffffffffffffffffffffffffff8316830361032e576102f6936117a1565b80fd5b503461033657817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261033657602090610ad7611b1e565b9051908152f35b508290346105bf576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105bf57610b1a3661152a565b90807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7c36011261033257610b4c611478565b9160e43567ffffffffffffffff8111610bda576102f694610b6f913691016115c1565b939092610b7c8351612054565b6020840151828501519083519260208401947f939c21a48a8dbe3a9a2404a1d46691e4d39f6583d6ec6b35714604c986d801068652840152336060840152608083015260a082015260a08152610bd18161141b565b51902091611c25565b8580fd5b509134610336576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261033657610c186114a0565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc360160c08112610332576080855191610c51836113e3565b1261033257845190610c6282611398565b73ffffffffffffffffffffffffffffffffffffffff91602435838116810361049f578152604435838116810361049f57602082015265ffffffffffff606435818116810361032a5788830152608435908116810361049f576060820152815260a435938285168503610bda576020820194855260c4359087830182815260e43567ffffffffffffffff811161032657610cfe90369084016115c1565b929093804211610d88575050918591610d786102f6999a610d7e95610d238851611fbe565b90898c511690519083519260208401947ff3841cd1ff0085026a6327b620b67997ce40f282c88a8e905a7a5626e310f3d086528401526060830152608082015260808152610d70816113ff565b519020611bd9565b916120c7565b519251169161199d565b602492508a51917fcd21db4f000000000000000000000000000000000000000000000000000000008352820152fd5b5091346103365760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc93818536011261033257610df36114a0565b9260249081359267ffffffffffffffff9788851161032a578590853603011261049f578051978589018981108282111761104a578252848301358181116103265785019036602383011215610326578382013591610e50836115ef565b90610e5d85519283611437565b838252602093878584019160071b83010191368311611046578801905b828210610fe9575050508a526044610e93868801611509565b96838c01978852013594838b0191868352604435908111610fe557610ebb90369087016115c1565b959096804211610fba575050508998995151610ed681611ebb565b908b5b818110610f9757505092889492610d7892610f6497958351610f02816103f98682018095611f66565b5190209073ffffffffffffffffffffffffffffffffffffffff9a8b8b51169151928551948501957faf1b0d30d2cab0380e68f0689007e3254993c596f2fdd0aaa7f4d04f794408638752850152830152608082015260808152610d70816113ff565b51169082515192845b848110610f78578580f35b80610f918585610f8b600195875161175e565b5161199d565b01610f6d565b80610311610fac8e9f9e93610fb2945161175e565b51611fbe565b9b9a9b610ed9565b8551917fcd21db4f000000000000000000000000000000000000000000000000000000008352820152fd5b8a80fd5b6080823603126110465785608091885161100281611398565b61100b85611509565b8152611018838601611509565b838201526110278a8601611607565b8a8201528d611037818701611607565b90820152815201910190610e7a565b8c80fd5b84896041867f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b5082346105bf576101407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105bf576110b03661152a565b91807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7c360112610332576110e2611478565b67ffffffffffffffff93906101043585811161049f5761110590369086016115c1565b90936101243596871161032a57611125610bd1966102f6983691016115c1565b969095825190611134826113ff565b606482527f5065726d69745769746e6573735472616e7366657246726f6d28546f6b656e5060208301527f65726d697373696f6e73207065726d69747465642c6164647265737320737065848301527f6e6465722c75696e74323536206e6f6e63652c75696e7432353620646561646c60608301527f696e652c0000000000000000000000000000000000000000000000000000000060808301528351948591816111e3602085018096611f93565b918237018b8152039361121c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe095868101835282611437565b5190209261122a8651612054565b6020878101518589015195519182019687526040820192909252336060820152608081019190915260a081019390935260e43560c08401528260e081016102e1565b5082346105bf576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261033257813567ffffffffffffffff92838211610bda5736602383011215610bda5781013592831161032e576024906007368386831b8401011161049f57865b8581106112e5578780f35b80821b83019060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc83360301126103265761139288876001946060835161132c81611398565b611368608461133c8d8601611509565b9485845261134c60448201611509565b809785015261135d60648201611509565b809885015201611509565b918291015273ffffffffffffffffffffffffffffffffffffffff80808093169516931691166117a1565b016112da565b6080810190811067ffffffffffffffff8211176113b457604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6060810190811067ffffffffffffffff8211176113b457604052565b60a0810190811067ffffffffffffffff8211176113b457604052565b60c0810190811067ffffffffffffffff8211176113b457604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176113b457604052565b60c4359073ffffffffffffffffffffffffffffffffffffffff8216820361149b57565b600080fd5b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361149b57565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361149b57565b6044359073ffffffffffffffffffffffffffffffffffffffff8216820361149b57565b359073ffffffffffffffffffffffffffffffffffffffff8216820361149b57565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc01906080821261149b576040805190611563826113e3565b8082941261149b57805181810181811067ffffffffffffffff8211176113b457825260043573ffffffffffffffffffffffffffffffffffffffff8116810361149b578152602435602082015282526044356020830152606435910152565b9181601f8401121561149b5782359167ffffffffffffffff831161149b576020838186019501011161149b57565b67ffffffffffffffff81116113b45760051b60200190565b359065ffffffffffff8216820361149b57565b9181601f8401121561149b5782359167ffffffffffffffff831161149b576020808501948460061b01011161149b57565b91909160608184031261149b576040805191611666836113e3565b8294813567ffffffffffffffff9081811161149b57830182601f8201121561149b578035611693816115ef565b926116a087519485611437565b818452602094858086019360061b8501019381851161149b579086899897969594939201925b8484106116e3575050505050855280820135908501520135910152565b90919293949596978483031261149b578851908982019082821085831117611730578a928992845261171487611509565b81528287013583820152815201930191908897969594936116c6565b602460007f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b80518210156117725760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b92919273ffffffffffffffffffffffffffffffffffffffff604060008284168152600160205282828220961695868252602052818120338252602052209485549565ffffffffffff8760a01c16804211611884575082871696838803611812575b5050611810955016926118b5565b565b878484161160001461184f57602488604051907ff96fb0710000000000000000000000000000000000000000000000000000000082526004820152fd5b7fffffffffffffffffffffffff000000000000000000000000000000000000000084846118109a031691161790553880611802565b602490604051907fd81b2f2e0000000000000000000000000000000000000000000000000000000082526004820152fd5b9060006064926020958295604051947f23b872dd0000000000000000000000000000000000000000000000000000000086526004860152602485015260448401525af13d15601f3d116001600051141617161561190e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c45440000000000000000000000006044820152fd5b91908110156117725760061b0190565b3573ffffffffffffffffffffffffffffffffffffffff8116810361149b5790565b9065ffffffffffff908160608401511673ffffffffffffffffffffffffffffffffffffffff908185511694826020820151169280866040809401511695169560009187835260016020528383208984526020528383209916988983526020528282209184835460d01c03611af5579185611ace94927fc6a377bfc4eb120024a8ac08eef205be16b817020812c73223e81d1bdb9708ec98979694508715600014611ad35779ffffffffffff00000000000000000000000000000000000000009042165b60a01b167fffffffffffff00000000000000000000000000000000000000000000000000006001860160d01b1617179055519384938491604091949373ffffffffffffffffffffffffffffffffffffffff606085019616845265ffffffffffff809216602085015216910152565b0390a4565b5079ffffffffffff000000000000000000000000000000000000000087611a60565b600484517f756688fe000000000000000000000000000000000000000000000000000000008152fd5b467f000000000000000000000000000000000000000000000000000000000000000103611b69577f866a5aba21966af95d6c7ab78eb2b2fc913915c28be3b9aa07cc04ff903e3f2890565b60405160208101907f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86682527f9ac997416e8ff9d2ff6bebeb7149f65cdae5e32e2b90440b566bb3044041d36a604082015246606082015230608082015260808152611bd3816113ff565b51902090565b611be1611b1e565b906040519060208201927f190100000000000000000000000000000000000000000000000000000000000084526022830152604282015260428152611bd381611398565b9192909360a435936040840151804211611cc65750602084510151808611611c955750918591610d78611c6594611c60602088015186611e47565b611bd9565b73ffffffffffffffffffffffffffffffffffffffff809151511692608435918216820361149b57611810936118b5565b602490604051907f3728b83d0000000000000000000000000000000000000000000000000000000082526004820152fd5b602490604051907fcd21db4f0000000000000000000000000000000000000000000000000000000082526004820152fd5b959093958051519560409283830151804211611e175750848803611dee57611d2e918691610d7860209b611c608d88015186611e47565b60005b868110611d42575050505050505050565b611d4d81835161175e565b5188611d5a83878a61196c565b01359089810151808311611dbe575091818888886001968596611d84575b50505050505001611d31565b611db395611dad9273ffffffffffffffffffffffffffffffffffffffff6105159351169561196c565b916118b5565b803888888883611d78565b6024908651907f3728b83d0000000000000000000000000000000000000000000000000000000082526004820152fd5b600484517fff633a38000000000000000000000000000000000000000000000000000000008152fd5b6024908551907fcd21db4f0000000000000000000000000000000000000000000000000000000082526004820152fd5b9073ffffffffffffffffffffffffffffffffffffffff600160ff83161b9216600052600060205260406000209060081c6000526020526040600020818154188091551615611e9157565b60046040517f756688fe000000000000000000000000000000000000000000000000000000008152fd5b90611ec5826115ef565b611ed26040519182611437565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611f0082946115ef565b0190602036910137565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611f375760010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b805160208092019160005b828110611f7f575050505090565b835185529381019392810192600101611f71565b9081519160005b838110611fab575050016000815290565b8060208092840101518185015201611f9a565b60405160208101917f65626cad6cb96493bf6f5ebea28756c966f023ab9e8a83a7101849d5573b3678835273ffffffffffffffffffffffffffffffffffffffff8082511660408401526020820151166060830152606065ffffffffffff9182604082015116608085015201511660a082015260a0815260c0810181811067ffffffffffffffff8211176113b45760405251902090565b6040516020808201927f618358ac3db8dc274f0cd8829da7e234bd48cd73c4a740aede1adec9846d06a1845273ffffffffffffffffffffffffffffffffffffffff81511660408401520151606082015260608152611bd381611398565b919082604091031261149b576020823592013590565b6000843b61222e5750604182036121ac576120e4828201826120b1565b939092604010156117725760209360009360ff6040608095013560f81c5b60405194855216868401526040830152606082015282805260015afa156121a05773ffffffffffffffffffffffffffffffffffffffff806000511691821561217657160361214c57565b60046040517f815e1d64000000000000000000000000000000000000000000000000000000008152fd5b60046040517f8baa579f000000000000000000000000000000000000000000000000000000008152fd5b6040513d6000823e3d90fd5b60408203612204576121c0918101906120b1565b91601b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84169360ff1c019060ff8211611f375760209360009360ff608094612102565b60046040517f4be6321b000000000000000000000000000000000000000000000000000000008152fd5b929391601f928173ffffffffffffffffffffffffffffffffffffffff60646020957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0604051988997889687947f1626ba7e000000000000000000000000000000000000000000000000000000009e8f8752600487015260406024870152816044870152868601378b85828601015201168101030192165afa9081156123a857829161232a575b507fffffffff000000000000000000000000000000000000000000000000000000009150160361230057565b60046040517fb0669cbc000000000000000000000000000000000000000000000000000000008152fd5b90506020813d82116123a0575b8161234460209383611437565b810103126103365751907fffffffff0000000000000000000000000000000000000000000000000000000082168203610a9a57507fffffffff0000000000000000000000000000000000000000000000000000000090386122d4565b3d9150612337565b6040513d84823e3d90fdfea164736f6c6343000811000a60806040526004361015610023575b361561001957600080fd5b610021615531565b005b60003560e01c80630396cb60146101b35780630bd28e3b146101aa5780631b2e01b8146101a15780631d732756146101985780631fad948c1461018f578063205c28781461018657806335567e1a1461017d5780634b1d7cf5146101745780635287ce121461016b57806370a08231146101625780638f41ec5a14610159578063957122ab146101505780639b249f6914610147578063a61935311461013e578063b760faf914610135578063bb9fe6bf1461012c578063c23a5cea14610123578063d6383f941461011a578063ee219423146101115763fc7e286d0361000e5761010c611bcd565b61000e565b5061010c6119b5565b5061010c61184d565b5061010c6116b4565b5061010c611536565b5061010c6114f7565b5061010c6114d6565b5061010c611337565b5061010c611164565b5061010c611129565b5061010c6110a4565b5061010c610f54565b5061010c610bf8565b5061010c610b33565b5061010c610994565b5061010c6108ba565b5061010c6106e7565b5061010c610467565b5061010c610385565b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043563ffffffff8116808203610359576103547fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01916102716102413373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b9161024d811515615697565b61026a610261600185015463ffffffff1690565b63ffffffff1690565b11156156fc565b54926103366dffffffffffffffffffffffffffff946102f461029834888460781c166121d5565b966102a4881515615761565b6102b0818911156157c6565b6102d4816102bc6105ec565b941684906dffffffffffffffffffffffffffff169052565b6001602084015287166dffffffffffffffffffffffffffff166040830152565b63ffffffff83166060820152600060808201526103313373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b61582b565b6040805194855263ffffffff90911660208501523393918291820190565b0390a2005b600080fd5b6024359077ffffffffffffffffffffffffffffffffffffffffffffffff8216820361035957565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043577ffffffffffffffffffffffffffffffffffffffffffffffff81168103610359576104149033600052600160205260406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b61041e8154612491565b9055005b73ffffffffffffffffffffffffffffffffffffffff81160361035957565b6024359061044d82610422565b565b60c4359061044d82610422565b359061044d82610422565b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760206104fc6004356104a881610422565b73ffffffffffffffffffffffffffffffffffffffff6104c561035e565b91166000526001835260406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b54604051908152f35b507f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60a0810190811067ffffffffffffffff82111761055157604052565b610559610505565b604052565b610100810190811067ffffffffffffffff82111761055157604052565b67ffffffffffffffff811161055157604052565b6060810190811067ffffffffffffffff82111761055157604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761055157604052565b6040519061044d82610535565b6040519060c0820182811067ffffffffffffffff82111761055157604052565b604051906040820182811067ffffffffffffffff82111761055157604052565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209267ffffffffffffffff8111610675575b01160190565b61067d610505565b61066f565b92919261068e82610639565b9161069c60405193846105ab565b829481845281830111610359578281602093846000960137010152565b9181601f840112156103595782359167ffffffffffffffff8311610359576020838186019501011161035957565b5034610359576101c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595767ffffffffffffffff60043581811161035957366023820112156103595761074a903690602481600401359101610682565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36016101808112610359576101006040519161078783610535565b12610359576040516107988161055e565b6107a0610440565b815260443560208201526064356040820152608435606082015260a43560808201526107ca61044f565b60a082015260e43560c08201526101043560e082015281526101243560208201526101443560408201526101643560608201526101843560808201526101a4359182116103595761083e9261082661082e9336906004016106b9565b9290916128b1565b6040519081529081906020820190565b0390f35b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126103595760043567ffffffffffffffff9283821161035957806023830112156103595781600401359384116103595760248460051b830101116103595760240191906024356108b781610422565b90565b5034610359576108c936610842565b6108d4929192611e3a565b6108dd83611d2d565b60005b84811061095d57506000927fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f9728480a183915b85831061092d576109238585611ed7565b6100216001600255565b909193600190610953610941878987611dec565b61094b8886611dca565b51908861233f565b0194019190610912565b8061098b610984610972600194869896611dca565b5161097e848a88611dec565b84613448565b9083612f30565b019290926108e0565b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576004356109d081610422565b6024359060009133835282602052604083206dffffffffffffffffffffffffffff81541692838311610ad557848373ffffffffffffffffffffffffffffffffffffffff829593610a788496610a3f610a2c8798610ad29c6121c0565b6dffffffffffffffffffffffffffff1690565b6dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b6040805173ffffffffffffffffffffffffffffffffffffffff831681526020810185905233917fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb91a2165af1610acc611ea7565b50615ba2565b80f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f576974686472617720616d6f756e7420746f6f206c61726765000000000000006044820152fd5b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576020600435610b7181610422565b73ffffffffffffffffffffffffffffffffffffffff610b8e61035e565b911660005260018252610bc98160406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000006040519260401b16178152f35b503461035957610c0736610842565b610c0f611e3a565b6000805b838210610df657610c249150611d2d565b7fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f972600080a16000805b848110610d5c57505060008093815b818110610c9357610923868660007f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d8180a2611ed7565b610cf7610ca182848a6124cb565b610ccc610cb3610cb36020840161256d565b73ffffffffffffffffffffffffffffffffffffffff1690565b7f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d600080a280612519565b906000915b808310610d1457505050610d0f90612491565b610c5c565b90919497610d4f610d49610d5592610d438c8b610d3c82610d368e8b8d611dec565b92611dca565b519161233f565b906121d5565b99612491565b95612491565b9190610cfc565b610d678186886124cb565b6020610d7f610d768380612519565b9290930161256d565b9173ffffffffffffffffffffffffffffffffffffffff60009316905b828410610db45750505050610daf90612491565b610c4d565b90919294610d4f81610de985610de2610dd0610dee968d611dca565b51610ddc8c8b8a611dec565b85613448565b908b613148565b612491565b929190610d9b565b610e018285876124cb565b90610e0c8280612519565b92610e1c610cb36020830161256d565b9173ffffffffffffffffffffffffffffffffffffffff8316610e416001821415612577565b610e62575b505050610e5c91610e56916121d5565b91612491565b90610c13565b909592610e7b6040999693999895989788810190611fc8565b92908a3b156103595789938b918a5193849283927fe3563a4f00000000000000000000000000000000000000000000000000000000845260049e8f850193610ec294612711565b03815a93600094fa9081610f3b575b50610f255786517f86a9f75000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a16818a0190815281906020010390fd5b0390fd5b9497509295509093509181610e56610e5c610e46565b80610f48610f4e9261057b565b8061111e565b38610ed1565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595761083e73ffffffffffffffffffffffffffffffffffffffff600435610fa881610422565b608060409283928351610fba81610535565b60009381858093528260208201528287820152826060820152015216815280602052209061104965ffffffffffff6001835194610ff686610535565b80546dffffffffffffffffffffffffffff8082168852607082901c60ff161515602089015260789190911c1685870152015463ffffffff8116606086015260201c16608084019065ffffffffffff169052565b5191829182919091608065ffffffffffff8160a08401956dffffffffffffffffffffffffffff808251168652602082015115156020870152604082015116604086015263ffffffff6060820151166060860152015116910152565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595773ffffffffffffffffffffffffffffffffffffffff6004356110f581610422565b16600052600060205260206dffffffffffffffffffffffffffff60406000205416604051908152f35b600091031261035957565b50346103595760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261035957602060405160018152f35b50346103595760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261035957600467ffffffffffffffff8135818111610359576111b590369084016106b9565b9050602435916111c483610422565b604435908111610359576111db90369085016106b9565b92909115908161132d575b506112c6576014821015611236575b610f21836040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160409060208152600060208201520190565b6112466112529261124c92612b88565b90612b96565b60601c90565b3b1561125f5738806111f5565b610f21906040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160609060208152601b60208201527f41413330207061796d6173746572206e6f74206465706c6f796564000000000060408201520190565b610f21836040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160609060208152601960208201527f41413230206163636f756e74206e6f74206465706c6f7965640000000000000060408201520190565b90503b15386111e6565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043567ffffffffffffffff81116103595761138960249136906004016106b9565b906113bf6040519283927f570e1a3600000000000000000000000000000000000000000000000000000000845260048401612d2c565b0360208273ffffffffffffffffffffffffffffffffffffffff92816000857f0000000000000000000000007fc98430eaedbb6070b35b39d798725049088348165af1918215611471575b600092611441575b50604051917f6ca7b806000000000000000000000000000000000000000000000000000000008352166004820152fd5b61146391925060203d811161146a575b61145b81836105ab565b810190612d17565b9038611411565b503d611451565b611479612183565b611409565b90816101609103126103595790565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc820112610359576004359067ffffffffffffffff8211610359576108b79160040161147e565b50346103595760206114ef6114ea3661148d565b612a0c565b604051908152f35b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595761002160043561153181610422565b61562b565b5034610359576000807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126116b1573381528060205260408120600181019063ffffffff825416908115611653576115f06115b5611618936115a76115a2855460ff9060701c1690565b61598f565b65ffffffffffff42166159f4565b84547fffffffffffffffffffffffffffffffffffffffffffff000000000000ffffffff16602082901b69ffffffffffff000000001617909455565b7fffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffff8154169055565b60405165ffffffffffff91909116815233907ffa9b3c14cc825c412c9ed81b3ba365a5b459439403f18829e572ed53a4180f0a90602090a280f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6e6f74207374616b6564000000000000000000000000000000000000000000006044820152fd5b80fd5b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576004356116f081610422565b610ad273ffffffffffffffffffffffffffffffffffffffff6117323373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b926117ea611755610a2c86546dffffffffffffffffffffffffffff9060781c1690565b94611761861515615a0e565b6117c26001820161179a65ffffffffffff611786835465ffffffffffff9060201c1690565b16611792811515615a73565b421015615ad8565b80547fffffffffffffffffffffffffffffffffffffffffffff00000000000000000000169055565b7fffffff0000000000000000000000000000ffffffffffffffffffffffffffffff8154169055565b6040805173ffffffffffffffffffffffffffffffffffffffff831681526020810186905233917fb7c918e0e249f999e965cafeb6c664271b3f4317d296461500e71da39f0cbda391a2600080809581948294165af1611847611ea7565b50615b3d565b50346103595760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595767ffffffffffffffff6004358181116103595761189e90369060040161147e565b602435916118ab83610422565b604435908111610359576118c6610f219136906004016106b9565b6118ce611caa565b6118d785612e2b565b6118ea6118e48287613240565b906153ba565b946118fa826000924384526121e2565b96438252819360609573ffffffffffffffffffffffffffffffffffffffff8316611981575b50505050608001519361194e6040611940602084015165ffffffffffff1690565b92015165ffffffffffff1690565b906040519687967f8b7ac980000000000000000000000000000000000000000000000000000000008852600488016127e1565b8395508394965061199b60409492939451809481936127d3565b03925af19060806119aa611ea7565b92919038808061191f565b5034610359576119c43661148d565b6119cc611caa565b6119d582612e2b565b6119df8183613240565b825160a00151919391611a0c9073ffffffffffffffffffffffffffffffffffffffff166154dc565b6154dc565b90611a30611a07855173ffffffffffffffffffffffffffffffffffffffff90511690565b94611a39612b50565b50611a68611a4c60409586810190611fc8565b90600060148310611bc55750611246611a079261124c92612b88565b91611a72916153ba565b805173ffffffffffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff821660018114916080880151978781015191886020820151611ac79065ffffffffffff1690565b91015165ffffffffffff16916060015192611ae06105f9565b9a8b5260208b0152841515898b015265ffffffffffff1660608a015265ffffffffffff16608089015260a088015215159081611bbc575b50611b515750610f2192519485947fe0cff05f00000000000000000000000000000000000000000000000000000000865260048601612cbd565b9190610f2193611b60846154dc565b611b87611b6b610619565b73ffffffffffffffffffffffffffffffffffffffff9096168652565b6020850152519586957ffaecb4e400000000000000000000000000000000000000000000000000000000875260048701612c2b565b90501538611b17565b9150506154dc565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595773ffffffffffffffffffffffffffffffffffffffff600435611c1e81610422565b16600052600060205260a0604060002065ffffffffffff60018254920154604051926dffffffffffffffffffffffffffff90818116855260ff8160701c161515602086015260781c16604084015263ffffffff8116606084015260201c166080820152f35b60209067ffffffffffffffff8111611c9d575b60051b0190565b611ca5610505565b611c96565b60405190611cb782610535565b604051608083610100830167ffffffffffffffff811184821017611d20575b60405260009283815283602082015283604082015283606082015283838201528360a08201528360c08201528360e082015281528260208201528260408201528260608201520152565b611d28610505565b611cd6565b90611d3782611c83565b611d4460405191826105ab565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611d728294611c83565b019060005b828110611d8357505050565b602090611d8e611caa565b82828501015201611d77565b507f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020918151811015611ddf575b60051b010190565b611de7611d9a565b611dd7565b9190811015611e2d575b60051b810135907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea181360301821215610359570190565b611e35611d9a565b611df6565b6002805414611e495760028055565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152fd5b3d15611ed2573d90611eb882610639565b91611ec660405193846105ab565b82523d6000602084013e565b606090565b73ffffffffffffffffffffffffffffffffffffffff168015611f6a57600080809381935af1611f04611ea7565b5015611f0c57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f41413931206661696c65642073656e6420746f2062656e6566696369617279006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4141393020696e76616c69642062656e656669636961727900000000000000006044820152fd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610359570180359067ffffffffffffffff82116103595760200191813603831361035957565b90816020910312610359575190565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b60005b83811061207a5750506000910152565b818101518382015260200161206a565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6020936120c681518092818752878088019101612067565b0116010190565b906120e76080916108b796946101c0808652850191612028565b9360e0815173ffffffffffffffffffffffffffffffffffffffff80825116602087015260208201516040870152604082015160608701526060820151858701528482015160a087015260a08201511660c086015260c081015182860152015161010084015260208101516101208401526040810151610140840152606081015161016084015201516101808201526101a081840391015261208a565b506040513d6000823e3d90fd5b507f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b919082039182116121cd57565b61044d612190565b919082018092116121cd57565b905a918160206121fb6060830151936060810190611fc8565b906122348560405195869485947f1d732756000000000000000000000000000000000000000000000000000000008652600486016120cd565b03816000305af16000918161230f575b50612308575060206000803e7fdeaddead000000000000000000000000000000000000000000000000000000006000511461229b5761229561228a6108b7945a906121c0565b6080840151906121d5565b91614afc565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152600f60408201527f41413935206f7574206f6620676173000000000000000000000000000000000060608201520190565b9250505090565b61233191925060203d8111612338575b61232981836105ab565b810190612019565b9038612244565b503d61231f565b909291925a9380602061235b6060830151946060810190611fc8565b906123948660405195869485947f1d732756000000000000000000000000000000000000000000000000000000008652600486016120cd565b03816000305af160009181612471575b5061246a575060206000803e7fdeaddead00000000000000000000000000000000000000000000000000000000600051146123fc576123f66123eb6108b795965a906121c0565b6080830151906121d5565b92614ddf565b610f21836040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152600f60408201527f41413935206f7574206f6620676173000000000000000000000000000000000060608201520190565b9450505050565b61248a91925060203d81116123385761232981836105ab565b90386123a4565b6001907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146124bf570190565b6124c7612190565b0190565b919081101561250c575b60051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa181360301821215610359570190565b612514611d9a565b6124d5565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610359570180359067ffffffffffffffff821161035957602001918160051b3603831361035957565b356108b781610422565b1561257e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4141393620696e76616c69642061676772656761746f720000000000000000006044820152fd5b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561035957016020813591019167ffffffffffffffff821161035957813603831361035957565b6108b7916126578161263d8461045c565b73ffffffffffffffffffffffffffffffffffffffff169052565b602082013560208201526126f26126a361268861267760408601866125dc565b610160806040880152860191612028565b61269560608601866125dc565b908583036060870152612028565b6080840135608084015260a084013560a084015260c084013560c084015260e084013560e084015261010080850135908401526101206126e5818601866125dc565b9185840390860152612028565b9161270361014091828101906125dc565b929091818503910152612028565b949391929083604087016040885252606086019360608160051b8801019482600090815b848310612754575050505050508460206108b795968503910152612028565b9091929394977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08b820301855288357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea1843603018112156127cf57600191846127bd920161262c565b98602090810196950193019190612735565b8280fd5b908092918237016000815290565b9290936108b796959260c0958552602085015265ffffffffffff8092166040850152166060830152151560808201528160a0820152019061208a565b1561282457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4141393220696e7465726e616c2063616c6c206f6e6c790000000000000000006044820152fd5b9060406108b79260008152816020820152019061208a565b6040906108b793928152816020820152019061208a565b909291925a936128c230331461281d565b8151946040860151955a6113886060830151890101116129e2576108b7966000958051612909575b50505090612903915a9003608084015101943691610682565b91615047565b612938916129349161292f855173ffffffffffffffffffffffffffffffffffffffff1690565b615c12565b1590565b612944575b80806128ea565b61290392919450612953615c24565b908151612967575b5050600193909161293d565b7f1c4fada7374c0a9ee8841fc38afe82932dc0f8e69012e927f061a8bae611a20173ffffffffffffffffffffffffffffffffffffffff6020870151926129d860206129c6835173ffffffffffffffffffffffffffffffffffffffff1690565b9201519560405193849316968361289a565b0390a3388061295b565b7fdeaddead0000000000000000000000000000000000000000000000000000000060005260206000fd5b612a22612a1c6040830183611fc8565b90615c07565b90612a33612a1c6060830183611fc8565b90612ae9612a48612a1c610120840184611fc8565b60405194859360208501956101008201359260e08301359260c08101359260a08201359260808301359273ffffffffffffffffffffffffffffffffffffffff60208201359135168c9693909a9998959261012098959273ffffffffffffffffffffffffffffffffffffffff6101408a019d168952602089015260408801526060870152608086015260a085015260c084015260e08301526101008201520152565b0391612b1b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938481018352826105ab565b51902060408051602081019283523091810191909152466060820152608092830181529091612b4a90826105ab565b51902090565b604051906040820182811067ffffffffffffffff821117612b7b575b60405260006020838281520152565b612b83610505565b612b6c565b906014116103595790601490565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000009035818116939260148110612bcb57505050565b60140360031b82901b16169150565b9060c060a06108b793805184526020810151602085015260408101511515604085015265ffffffffffff80606083015116606086015260808201511660808501520151918160a0820152019061208a565b9294612c8c61044d95612c7a610100959998612c68612c54602097610140808c528b0190612bda565b9b878a019060208091805184520151910152565b80516060890152602001516080880152565b805160a08701526020015160c0860152565b73ffffffffffffffffffffffffffffffffffffffff81511660e0850152015191019060208091805184520151910152565b612d0661044d94612cf4612cdf60a0959998969960e0865260e0860190612bda565b98602085019060208091805184520151910152565b80516060840152602001516080830152565b019060208091805184520151910152565b9081602091031261035957516108b781610422565b9160206108b7938181520191612028565b90612d6c73ffffffffffffffffffffffffffffffffffffffff916108b797959694606085526060850191612028565b941660208201526040818503910152612028565b60009060033d11612d8d57565b905060046000803e60005160e01c90565b600060443d106108b7576040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc91823d016004833e815167ffffffffffffffff918282113d602484011117612e1a57818401948551938411612e22573d85010160208487010111612e1a57506108b7929101602001906105ab565b949350505050565b50949350505050565b612e386040820182611fc8565b612e50612e448461256d565b93610120810190611fc8565b9290303b1561035957600093612e949160405196879586957f957122ab00000000000000000000000000000000000000000000000000000000875260048701612d3d565b0381305afa9081612f1d575b5061044d576001612eaf612d80565b6308c379a014612ec8575b612ec057565b61044d612183565b612ed0612d9e565b80612edc575b50612eba565b80516000925015612ed657610f21906040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301612882565b80610f48612f2a9261057b565b38612ea0565b9190612f3b9061317f565b73ffffffffffffffffffffffffffffffffffffffff929183166130da5761306c57612f659061317f565b9116612ffe57612f725750565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602160448201527f41413332207061796d61737465722065787069726564206f72206e6f7420647560648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a490fd5b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601460408201527f41413334207369676e6174757265206572726f7200000000000000000000000060608201520190565b610f21836040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601760408201527f414132322065787069726564206f72206e6f742064756500000000000000000060608201520190565b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601460408201527f41413234207369676e6174757265206572726f7200000000000000000000000060608201520190565b9291906131549061317f565b909273ffffffffffffffffffffffffffffffffffffffff808095169116036130da5761306c57612f65905b80156131d25761318e9061535f565b73ffffffffffffffffffffffffffffffffffffffff65ffffffffffff8060408401511642119081156131c2575b5091511691565b90506020830151164210386131bb565b50600090600090565b156131e257565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f41413934206761732076616c756573206f766572666c6f7700000000000000006044820152fd5b916000915a9381519061325382826136b3565b61325c81612a0c565b602084015261329a6effffffffffffffffffffffffffffff60808401516060850151176040850151176101008401359060e0850135171711156131db565b6132a382613775565b6132ae818584613836565b97906132df6129346132d4875173ffffffffffffffffffffffffffffffffffffffff1690565b60208801519061546c565b6133db576132ec43600052565b73ffffffffffffffffffffffffffffffffffffffff61332460a0606097015173ffffffffffffffffffffffffffffffffffffffff1690565b166133c1575b505a810360a0840135106133545760809360c092604087015260608601525a900391013501910152565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601e60408201527f41413430206f76657220766572696669636174696f6e4761734c696d6974000060608201520190565b909350816133d2929750858461455c565b9590923861332a565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601a60408201527f4141323520696e76616c6964206163636f756e74206e6f6e636500000000000060608201520190565b9290916000925a825161345b81846136b3565b61346483612a0c565b60208501526134a26effffffffffffffffffffffffffffff60808301516060840151176040840151176101008601359060e0870135171711156131db565b6134ab81613775565b6134b78186868b613ba2565b98906134e86129346134dd865173ffffffffffffffffffffffffffffffffffffffff1690565b60208701519061546c565b6135e0576134f543600052565b73ffffffffffffffffffffffffffffffffffffffff61352d60a0606096015173ffffffffffffffffffffffffffffffffffffffff1690565b166135c5575b505a840360a08601351061355f5750604085015260608401526080919060c0905a900391013501910152565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601e60448201527f41413430206f76657220766572696669636174696f6e4761734c696d697400006064820152608490fd5b909250816135d79298508686856147ef565b96909138613533565b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601a60408201527f4141323520696e76616c6964206163636f756e74206e6f6e636500000000000060608201520190565b1561365557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4141393320696e76616c6964207061796d6173746572416e64446174610000006044820152fd5b613725906136dd6136c38261256d565b73ffffffffffffffffffffffffffffffffffffffff168452565b602081013560208401526080810135604084015260a0810135606084015260c0810135608084015260e081013560c084015261010081013560e0840152610120810190611fc8565b90811561376a5761374f61124c6112468460a09461374a601461044d9998101561364e565b612b88565b73ffffffffffffffffffffffffffffffffffffffff16910152565b505060a06000910152565b60a081015173ffffffffffffffffffffffffffffffffffffffff16156137b75760c060035b60ff60408401519116606084015102016080830151019101510290565b60c0600161379a565b6137d86040929594939560608352606083019061262c565b9460208201520152565b9061044d602f60405180947f414132332072657665727465643a20000000000000000000000000000000000060208301526138268151809260208686019101612067565b810103600f8101855201836105ab565b916000926000925a936139046020835193613865855173ffffffffffffffffffffffffffffffffffffffff1690565b9561387d6138766040830183611fc8565b9084613e0d565b60a086015173ffffffffffffffffffffffffffffffffffffffff16906138a243600052565b85809373ffffffffffffffffffffffffffffffffffffffff809416159889613b3a575b60600151908601516040517f3a871cdd0000000000000000000000000000000000000000000000000000000081529788968795869390600485016137c0565b03938a1690f1829181613b1a575b50613b115750600190613923612d80565b6308c379a014613abd575b50613a50575b613941575b50505a900391565b61396b9073ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b613986610a2c82546dffffffffffffffffffffffffffff1690565b8083116139e3576139dc926dffffffffffffffffffffffffffff9103166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b3880613939565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601760408201527f41413231206469646e2774207061792070726566756e6400000000000000000060608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601660408201527f4141323320726576657274656420286f72204f4f47290000000000000000000060608201520190565b613ac5612d9e565b9081613ad1575061392e565b610f2191613adf91506137e2565b6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301612882565b95506139349050565b613b3391925060203d81116123385761232981836105ab565b9038613912565b9450613b80610a2c613b6c8c73ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b546dffffffffffffffffffffffffffff1690565b8b811115613b975750856060835b969150506138c5565b606087918d03613b8e565b90926000936000935a94613beb6020835193613bd2855173ffffffffffffffffffffffffffffffffffffffff1690565b9561387d613be36040830183611fc8565b90848c61412b565b03938a1690f1829181613ded575b50613de45750600190613c0a612d80565b6308c379a014613d8e575b50613d20575b613c29575b5050505a900391565b613c539073ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b91613c6f610a2c84546dffffffffffffffffffffffffffff1690565b90818311613cba575082547fffffffffffffffffffffffffffffffffffff0000000000000000000000000000169190036dffffffffffffffffffffffffffff16179055388080613c20565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601760448201527f41413231206469646e2774207061792070726566756e640000000000000000006064820152608490fd5b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601660408201527f4141323320726576657274656420286f72204f4f47290000000000000000000060608201520190565b613d96612d9e565b9081613da25750613c15565b8691613dae91506137e2565b90610f216040519283927f220266b60000000000000000000000000000000000000000000000000000000084526004840161289a565b9650613c1b9050565b613e0691925060203d81116123385761232981836105ab565b9038613bf9565b909180613e1957505050565b81515173ffffffffffffffffffffffffffffffffffffffff1692833b6140be57606083510151604051907f570e1a3600000000000000000000000000000000000000000000000000000000825260208280613e78878760048401612d2c565b0381600073ffffffffffffffffffffffffffffffffffffffff95867f0000000000000000000000007fc98430eaedbb6070b35b39d7987250490883481690f19182156140b1575b600092614091575b508082169586156140245716809503613fb7573b15613f4a5761124c6112467fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d93613f1193612b88565b602083810151935160a001516040805173ffffffffffffffffffffffffffffffffffffffff9485168152939091169183019190915290a3565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f4141313520696e6974436f6465206d757374206372656174652073656e64657260608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f4141313420696e6974436f6465206d7573742072657475726e2073656e64657260608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601b60408201527f4141313320696e6974436f6465206661696c6564206f72204f4f47000000000060608201520190565b6140aa91925060203d811161146a5761145b81836105ab565b9038613ec7565b6140b9612183565b613ebf565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601f60408201527f414131302073656e64657220616c726561647920636f6e73747275637465640060608201520190565b9290918161413a575b50505050565b82515173ffffffffffffffffffffffffffffffffffffffff1693843b6143e257606084510151604051907f570e1a3600000000000000000000000000000000000000000000000000000000825260208280614199888860048401612d2c565b0381600073ffffffffffffffffffffffffffffffffffffffff95867f0000000000000000000000007fc98430eaedbb6070b35b39d7987250490883481690f19182156143d5575b6000926143b5575b5080821696871561434757168096036142d9573b15614273575061124c6112467fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d9361423393612b88565b602083810151935160a001516040805173ffffffffffffffffffffffffffffffffffffffff9485168152939091169183019190915290a338808080614134565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602060448201527f4141313520696e6974436f6465206d757374206372656174652073656e6465726064820152608490fd5b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152602060408201527f4141313420696e6974436f6465206d7573742072657475726e2073656e64657260608201520190565b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601b60408201527f4141313320696e6974436f6465206661696c6564206f72204f4f47000000000060608201520190565b6143ce91925060203d811161146a5761145b81836105ab565b90386141e8565b6143dd612183565b6141e0565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601f60448201527f414131302073656e64657220616c726561647920636f6e7374727563746564006064820152608490fd5b1561444f57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4141343120746f6f206c6974746c6520766572696669636174696f6e476173006044820152fd5b919060408382031261035957825167ffffffffffffffff81116103595783019080601f83011215610359578151916144e483610639565b916144f260405193846105ab565b838352602084830101116103595760209261451291848085019101612067565b92015190565b9061044d602f60405180947f414133332072657665727465643a20000000000000000000000000000000000060208301526138268151809260208686019101612067565b93919260609460009460009380519261459b60a08a86015195614580888811614448565b015173ffffffffffffffffffffffffffffffffffffffff1690565b916145c68373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b946145e2610a2c87546dffffffffffffffffffffffffffff1690565b968588106147825773ffffffffffffffffffffffffffffffffffffffff60208a98946146588a966dffffffffffffffffffffffffffff8b6146919e03166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b015194604051998a98899788937ff465c77e000000000000000000000000000000000000000000000000000000008552600485016137c0565b0395169103f190818391849361475c575b506147555750506001906146b4612d80565b6308c379a014614733575b506146c657565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601660408201527f4141333320726576657274656420286f72204f4f47290000000000000000000060608201520190565b61473b612d9e565b908161474757506146bf565b610f2191613adf9150614518565b9450925050565b90925061477b91503d8085833e61477381836105ab565b8101906144ad565b91386146a2565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601e60408201527f41413331207061796d6173746572206465706f73697420746f6f206c6f77000060608201520190565b91949293909360609560009560009382519061481660a08b84015193614580848611614448565b936148418573ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b61485c610a2c82546dffffffffffffffffffffffffffff1690565b8781106149b7579273ffffffffffffffffffffffffffffffffffffffff60208a989693946146588a966dffffffffffffffffffffffffffff8d6148d69e9c9a03166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b0395169103f1908183918493614999575b506149915750506001906148f9612d80565b6308c379a014614972575b5061490c5750565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601660448201527f4141333320726576657274656420286f72204f4f4729000000000000000000006064820152608490fd5b61497a612d9e565b90816149865750614904565b613dae925050614518565b955093505050565b9092506149b091503d8085833e61477381836105ab565b91386148e7565b610f218a6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601e60408201527f41413331207061796d6173746572206465706f73697420746f6f206c6f77000060608201520190565b60031115614a2f57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b929190614a7c6040916002865260606020870152606086019061208a565b930152565b939291906003811015614a2f57604091614a7c91865260606020870152606086019061208a565b9061044d603660405180947f4141353020706f73744f702072657665727465643a20000000000000000000006020830152614aec8151809260208686019101612067565b81010360168101855201836105ab565b929190925a93600091805191614b1183615318565b9260a0810195614b35875173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff93908481169081614ca457505050614b76825173ffffffffffffffffffffffffffffffffffffffff1690565b985b5a90030193840297604084019089825110614c37577f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f94614bc26020928c614c329551039061553a565b015194896020614c04614be9865173ffffffffffffffffffffffffffffffffffffffff1690565b9a5173ffffffffffffffffffffffffffffffffffffffff1690565b9401519785604051968796169a16988590949392606092608083019683521515602083015260408201520152565b0390a4565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f414135312070726566756e642062656c6f772061637475616c476173436f737460608201520190565b9a918051614cb4575b5050614b78565b6060850151600099509091803b15614ddb579189918983614d07956040518097819682957fa9a234090000000000000000000000000000000000000000000000000000000084528c029060048401614a5e565b0393f19081614dc8575b50614dc3576001614d20612d80565b6308c379a014614da4575b614d37575b3880614cad565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b614dac612d9e565b80614db75750614d2b565b613adf610f2191614aa8565b614d30565b80610f48614dd59261057b565b38614d11565b8980fd5b9392915a90600092805190614df382615318565b9360a0830196614e17885173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff95908681169081614f0d57505050614e58845173ffffffffffffffffffffffffffffffffffffffff1690565b915b5a9003019485029860408301908a825110614ea757507f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f949392614bc2614c32938c60209451039061553a565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602060448201527f414135312070726566756e642062656c6f772061637475616c476173436f73746064820152608490fd5b93918051614f1d575b5050614e5a565b606087015160009a509091803b1561504357918a918a83614f70956040518097819682957fa9a234090000000000000000000000000000000000000000000000000000000084528c029060048401614a5e565b0393f19081615030575b5061502b576001614f89612d80565b6308c379a01461500e575b614fa0575b3880614f16565b610f218b6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b615016612d9e565b806150215750614f94565b613dae8d91614aa8565b614f99565b80610f4861503d9261057b565b38614f7a565b8a80fd5b909392915a9480519161505983615318565b9260a081019561507d875173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff938185169182615165575050506150bd825173ffffffffffffffffffffffffffffffffffffffff1690565b985b5a90030193840297604084019089825110614c37577f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f946151096020928c614c329551039061553a565b61511288614a25565b015194896020615139614be9865173ffffffffffffffffffffffffffffffffffffffff1690565b940151604080519182529815602082015297880152606087015290821695909116939081906080820190565b9a918151615175575b50506150bf565b8784026151818a614a25565b60028a1461520c576060860151823b15610359576151d493600080948d604051978896879586937fa9a2340900000000000000000000000000000000000000000000000000000000855260048501614a81565b0393f180156151ff575b6151ec575b505b388061516e565b80610f486151f99261057b565b386151e3565b615207612183565b6151de565b6060860151823b156103595761525793600080948d604051978896879586937fa9a2340900000000000000000000000000000000000000000000000000000000855260048501614a81565b0393f19081615305575b50615300576001615270612d80565b6308c379a0146152ed575b156151e5576040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b6152f5612d9e565b80614db7575061527b565b6151e5565b80610f486153129261057b565b38615261565b60e060c082015191015180821461533c57480180821015615337575090565b905090565b5090565b6040519061534d8261058f565b60006040838281528260208201520152565b615367615340565b5065ffffffffffff808260a01c1680156153b3575b604051926153898461058f565b73ffffffffffffffffffffffffffffffffffffffff8116845260d01c602084015216604082015290565b508061537c565b6153cf6153d5916153c9615340565b5061535f565b9161535f565b9073ffffffffffffffffffffffffffffffffffffffff9182825116928315615461575b65ffffffffffff928391826040816020850151169301511693836040816020840151169201511690808410615459575b50808511615451575b506040519561543f8761058f565b16855216602084015216604082015290565b935038615431565b925038615428565b8151811693506153f8565b73ffffffffffffffffffffffffffffffffffffffff16600052600160205267ffffffffffffffff6154c88260401c60406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b918254926154d584612491565b9055161490565b9073ffffffffffffffffffffffffffffffffffffffff6154fa612b50565b9216600052600060205263ffffffff600160406000206dffffffffffffffffffffffffffff815460781c1685520154166020830152565b61044d3361562b565b73ffffffffffffffffffffffffffffffffffffffff16600052600060205260406000206dffffffffffffffffffffffffffff8082541692830180931161561e575b8083116155c05761044d92166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f6465706f736974206f766572666c6f77000000000000000000000000000000006044820152fd5b615626612190565b61557b565b73ffffffffffffffffffffffffffffffffffffffff9061564b348261553a565b168060005260006020527f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c460206dffffffffffffffffffffffffffff60406000205416604051908152a2565b1561569e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6d757374207370656369667920756e7374616b652064656c61790000000000006044820152fd5b1561570357565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f63616e6e6f7420646563726561736520756e7374616b652074696d65000000006044820152fd5b1561576857565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6e6f207374616b652073706563696669656400000000000000000000000000006044820152fd5b156157cd57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f7374616b65206f766572666c6f770000000000000000000000000000000000006044820152fd5b9065ffffffffffff6080600161044d9461588b6dffffffffffffffffffffffffffff86511682906dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b602085015115156eff000000000000000000000000000082549160701b16807fffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffff83161783557fffffff000000000000000000000000000000ffffffffffffffffffffffffffff7cffffffffffffffffffffffffffff000000000000000000000000000000604089015160781b16921617178155019263ffffffff6060820151167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000008554161784550151167fffffffffffffffffffffffffffffffffffffffffffff000000000000ffffffff69ffffffffffff0000000083549260201b169116179055565b1561599657565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f616c726561647920756e7374616b696e670000000000000000000000000000006044820152fd5b91909165ffffffffffff808094169116019182116121cd57565b15615a1557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4e6f207374616b6520746f2077697468647261770000000000000000000000006044820152fd5b15615a7a57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6d7573742063616c6c20756e6c6f636b5374616b6528292066697273740000006044820152fd5b15615adf57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5374616b65207769746864726177616c206973206e6f742064756500000000006044820152fd5b15615b4457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f6661696c656420746f207769746864726177207374616b6500000000000000006044820152fd5b15615ba957565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6661696c656420746f20776974686472617700000000000000000000000000006044820152fd5b816040519182372090565b9060009283809360208451940192f190565b3d610800808211615c4b575b50604051906020818301016040528082526000602083013e90565b905038615c3056fea2646970667358221220a706d8b02d7086d80e9330811f5af84b2614abdc5e9a1f2260126070a31d7cee64736f6c634300081100336080604052600436106100f35760003560e01c80634d2301cc1161008a578063a8b0574e11610059578063a8b0574e1461025a578063bce38bd714610275578063c3077fa914610288578063ee82ac5e1461029b57600080fd5b80634d2301cc146101ec57806372425d9d1461022157806382ad56cb1461023457806386d516e81461024757600080fd5b80633408e470116100c65780633408e47014610191578063399542e9146101a45780633e64a696146101c657806342cbb15c146101d957600080fd5b80630f28c97d146100f8578063174dea711461011a578063252dba421461013a57806327e86d6e1461015b575b600080fd5b34801561010457600080fd5b50425b6040519081526020015b60405180910390f35b61012d610128366004610a85565b6102ba565b6040516101119190610bbe565b61014d610148366004610a85565b6104ef565b604051610111929190610bd8565b34801561016757600080fd5b50437fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0140610107565b34801561019d57600080fd5b5046610107565b6101b76101b2366004610c60565b610690565b60405161011193929190610cba565b3480156101d257600080fd5b5048610107565b3480156101e557600080fd5b5043610107565b3480156101f857600080fd5b50610107610207366004610ce2565b73ffffffffffffffffffffffffffffffffffffffff163190565b34801561022d57600080fd5b5044610107565b61012d610242366004610a85565b6106ab565b34801561025357600080fd5b5045610107565b34801561026657600080fd5b50604051418152602001610111565b61012d610283366004610c60565b61085a565b6101b7610296366004610a85565b610a1a565b3480156102a757600080fd5b506101076102b6366004610d18565b4090565b60606000828067ffffffffffffffff8111156102d8576102d8610d31565b60405190808252806020026020018201604052801561031e57816020015b6040805180820190915260008152606060208201528152602001906001900390816102f65790505b5092503660005b8281101561047757600085828151811061034157610341610d60565b6020026020010151905087878381811061035d5761035d610d60565b905060200281019061036f9190610d8f565b6040810135958601959093506103886020850185610ce2565b73ffffffffffffffffffffffffffffffffffffffff16816103ac6060870187610dcd565b6040516103ba929190610e32565b60006040518083038185875af1925050503d80600081146103f7576040519150601f19603f3d011682016040523d82523d6000602084013e6103fc565b606091505b50602080850191909152901515808452908501351761046d577f08c379a000000000000000000000000000000000000000000000000000000000600052602060045260176024527f4d756c746963616c6c333a2063616c6c206661696c656400000000000000000060445260846000fd5b5050600101610325565b508234146104e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4d756c746963616c6c333a2076616c7565206d69736d6174636800000000000060448201526064015b60405180910390fd5b50505092915050565b436060828067ffffffffffffffff81111561050c5761050c610d31565b60405190808252806020026020018201604052801561053f57816020015b606081526020019060019003908161052a5790505b5091503660005b8281101561068657600087878381811061056257610562610d60565b90506020028101906105749190610e42565b92506105836020840184610ce2565b73ffffffffffffffffffffffffffffffffffffffff166105a66020850185610dcd565b6040516105b4929190610e32565b6000604051808303816000865af19150503d80600081146105f1576040519150601f19603f3d011682016040523d82523d6000602084013e6105f6565b606091505b5086848151811061060957610609610d60565b602090810291909101015290508061067d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4d756c746963616c6c333a2063616c6c206661696c656400000000000000000060448201526064016104dd565b50600101610546565b5050509250929050565b43804060606106a086868661085a565b905093509350939050565b6060818067ffffffffffffffff8111156106c7576106c7610d31565b60405190808252806020026020018201604052801561070d57816020015b6040805180820190915260008152606060208201528152602001906001900390816106e55790505b5091503660005b828110156104e657600084828151811061073057610730610d60565b6020026020010151905086868381811061074c5761074c610d60565b905060200281019061075e9190610e76565b925061076d6020840184610ce2565b73ffffffffffffffffffffffffffffffffffffffff166107906040850185610dcd565b60405161079e929190610e32565b6000604051808303816000865af19150503d80600081146107db576040519150601f19603f3d011682016040523d82523d6000602084013e6107e0565b606091505b506020808401919091529015158083529084013517610851577f08c379a000000000000000000000000000000000000000000000000000000000600052602060045260176024527f4d756c746963616c6c333a2063616c6c206661696c656400000000000000000060445260646000fd5b50600101610714565b6060818067ffffffffffffffff81111561087657610876610d31565b6040519080825280602002602001820160405280156108bc57816020015b6040805180820190915260008152606060208201528152602001906001900390816108945790505b5091503660005b82811015610a105760008482815181106108df576108df610d60565b602002602001015190508686838181106108fb576108fb610d60565b905060200281019061090d9190610e42565b925061091c6020840184610ce2565b73ffffffffffffffffffffffffffffffffffffffff1661093f6020850185610dcd565b60405161094d929190610e32565b6000604051808303816000865af19150503d806000811461098a576040519150601f19603f3d011682016040523d82523d6000602084013e61098f565b606091505b506020830152151581528715610a07578051610a07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4d756c746963616c6c333a2063616c6c206661696c656400000000000000000060448201526064016104dd565b506001016108c3565b5050509392505050565b6000806060610a2b60018686610690565b919790965090945092505050565b60008083601f840112610a4b57600080fd5b50813567ffffffffffffffff811115610a6357600080fd5b6020830191508360208260051b8501011115610a7e57600080fd5b9250929050565b60008060208385031215610a9857600080fd5b823567ffffffffffffffff811115610aaf57600080fd5b610abb85828601610a39565b90969095509350505050565b6000815180845260005b81811015610aed57602081850181015186830182015201610ad1565b81811115610aff576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600082825180855260208086019550808260051b84010181860160005b84811015610bb1578583037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001895281518051151584528401516040858501819052610b9d81860183610ac7565b9a86019a9450505090830190600101610b4f565b5090979650505050505050565b602081526000610bd16020830184610b32565b9392505050565b600060408201848352602060408185015281855180845260608601915060608160051b870101935082870160005b82811015610c52577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0888703018452610c40868351610ac7565b95509284019290840190600101610c06565b509398975050505050505050565b600080600060408486031215610c7557600080fd5b83358015158114610c8557600080fd5b9250602084013567ffffffffffffffff811115610ca157600080fd5b610cad86828701610a39565b9497909650939450505050565b838152826020820152606060408201526000610cd96060830184610b32565b95945050505050565b600060208284031215610cf457600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610bd157600080fd5b600060208284031215610d2a57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81833603018112610dc357600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112610e0257600080fd5b83018035915067ffffffffffffffff821115610e1d57600080fd5b602001915036819003821315610a7e57600080fd5b8183823760009101908152919050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112610dc357600080fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112610dc357600080fdfea2646970667358221220bb2b5c71a328032f97c676ae39a1ec2148d3e5d6f73d95e9b17910152d61f16264736f6c634300080c0033608060405234801561001057600080fd5b50600436106100a5576000357c010000000000000000000000000000000000000000000000000000000090048063a41e7d5111610078578063a41e7d51146101d4578063aabbb8ca1461020a578063b705676514610236578063f712f3e814610280576100a5565b806329965a1d146100aa5780633d584063146100e25780635df8122f1461012457806365ba36c114610152575b600080fd5b6100e0600480360360608110156100c057600080fd5b50600160a060020a038135811691602081013591604090910135166102b6565b005b610108600480360360208110156100f857600080fd5b5035600160a060020a0316610570565b60408051600160a060020a039092168252519081900360200190f35b6100e06004803603604081101561013a57600080fd5b50600160a060020a03813581169160200135166105bc565b6101c26004803603602081101561016857600080fd5b81019060208101813564010000000081111561018357600080fd5b82018360208201111561019557600080fd5b803590602001918460018302840111640100000000831117156101b757600080fd5b5090925090506106b3565b60408051918252519081900360200190f35b6100e0600480360360408110156101ea57600080fd5b508035600160a060020a03169060200135600160e060020a0319166106ee565b6101086004803603604081101561022057600080fd5b50600160a060020a038135169060200135610778565b61026c6004803603604081101561024c57600080fd5b508035600160a060020a03169060200135600160e060020a0319166107ef565b604080519115158252519081900360200190f35b61026c6004803603604081101561029657600080fd5b508035600160a060020a03169060200135600160e060020a0319166108aa565b6000600160a060020a038416156102cd57836102cf565b335b9050336102db82610570565b600160a060020a031614610339576040805160e560020a62461bcd02815260206004820152600f60248201527f4e6f7420746865206d616e616765720000000000000000000000000000000000604482015290519081900360640190fd5b6103428361092a565b15610397576040805160e560020a62461bcd02815260206004820152601a60248201527f4d757374206e6f7420626520616e204552433136352068617368000000000000604482015290519081900360640190fd5b600160a060020a038216158015906103b85750600160a060020a0382163314155b156104ff5760405160200180807f455243313832305f4143434550545f4d4147494300000000000000000000000081525060140190506040516020818303038152906040528051906020012082600160a060020a031663249cb3fa85846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182600160a060020a0316600160a060020a031681526020019250505060206040518083038186803b15801561047e57600080fd5b505afa158015610492573d6000803e3d6000fd5b505050506040513d60208110156104a857600080fd5b5051146104ff576040805160e560020a62461bcd02815260206004820181905260248201527f446f6573206e6f7420696d706c656d656e742074686520696e74657266616365604482015290519081900360640190fd5b600160a060020a03818116600081815260208181526040808320888452909152808220805473ffffffffffffffffffffffffffffffffffffffff19169487169485179055518692917f93baa6efbd2244243bfee6ce4cfdd1d04fc4c0e9a786abd3a41313bd352db15391a450505050565b600160a060020a03818116600090815260016020526040812054909116151561059a5750806105b7565b50600160a060020a03808216600090815260016020526040902054165b919050565b336105c683610570565b600160a060020a031614610624576040805160e560020a62461bcd02815260206004820152600f60248201527f4e6f7420746865206d616e616765720000000000000000000000000000000000604482015290519081900360640190fd5b81600160a060020a031681600160a060020a0316146106435780610646565b60005b600160a060020a03838116600081815260016020526040808220805473ffffffffffffffffffffffffffffffffffffffff19169585169590951790945592519184169290917f605c2dbf762e5f7d60a546d42e7205dcb1b011ebc62a61736a57c9089d3a43509190a35050565b600082826040516020018083838082843780830192505050925050506040516020818303038152906040528051906020012090505b92915050565b6106f882826107ef565b610703576000610705565b815b600160a060020a03928316600081815260208181526040808320600160e060020a031996909616808452958252808320805473ffffffffffffffffffffffffffffffffffffffff19169590971694909417909555908152600284528181209281529190925220805460ff19166001179055565b600080600160a060020a038416156107905783610792565b335b905061079d8361092a565b156107c357826107ad82826108aa565b6107b85760006107ba565b815b925050506106e8565b600160a060020a0390811660009081526020818152604080832086845290915290205416905092915050565b6000808061081d857f01ffc9a70000000000000000000000000000000000000000000000000000000061094c565b909250905081158061082d575080155b1561083d576000925050506106e8565b61084f85600160e060020a031961094c565b909250905081158061086057508015155b15610870576000925050506106e8565b61087a858561094c565b909250905060018214801561088f5750806001145b1561089f576001925050506106e8565b506000949350505050565b600160a060020a0382166000908152600260209081526040808320600160e060020a03198516845290915281205460ff1615156108f2576108eb83836107ef565b90506106e8565b50600160a060020a03808316600081815260208181526040808320600160e060020a0319871684529091529020549091161492915050565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff161590565b6040517f01ffc9a7000000000000000000000000000000000000000000000000000000008082526004820183905260009182919060208160248189617530fa90519096909550935050505056fea165627a7a72305820377f4a2d4301ede9949f163f319021a6e9c687c292a5e2b2c4734c126b524e6c00293373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500a2646970667358221220d6a2f1e8cd6ae28f4407e28ca400bfc256d10d211bbddae48986ad780ac9ece064736f6c63430008180033", + Bin: "0x6080604052600c80546201000162ff00ff19909116179055601380546001600160a01b03191673dddddddddddddddddddddddddddddddddddddddd17905534801561004957600080fd5b506202083c806200005b6000396000f3fe60806040523480156200001157600080fd5b5060043610620000465760003560e01c8063bcf30fd8146200004b578063f0b4cd311462000064578063f8ccbf47146200007b575b600080fd5b620000626200005c3660046200286a565b620000a3565b005b62000062620000753660046200286a565b620000b1565b600c546200008f9062010000900460ff1681565b604051901515815260200160405180910390f35b620000ae8162000259565b50565b620000bc8162000259565b604051635a6b63c160e11b815260008051602062003c9a8339815191529063b4d6c78290620000f0903390600401620028af565b600060405180830381600087803b1580156200010b57600080fd5b505af115801562000120573d6000803e3d6000fd5b5050604051631c72346d60e01b815233600482015260008051602062003c9a8339815191529250631c72346d9150602401600060405180830381600087803b1580156200016c57600080fd5b505af115801562000181573d6000803e3d6000fd5b505060405163c88a5e6d60e01b81523360048201526000602482015260008051602062003c9a833981519152925063c88a5e6d9150604401600060405180830381600087803b158015620001d457600080fd5b505af1158015620001e9573d6000803e3d6000fd5b505060405163709ecd3f60e01b815260008051602062003c9a833981519152925063709ecd3f915062000222906012906004016200290e565b600060405180830381600087803b1580156200023d57600080fd5b505af115801562000252573d6000803e3d6000fd5b5050505050565b80600d62000268828262002b14565b5050600f54604051632024eee960e11b8152600481019190915260008051602062003c9a83398151915290634049ddd290602401600060405180830381600087803b158015620002b757600080fd5b505af1158015620002cc573d6000803e3d6000fd5b50506013546040516303223eab60e11b81526001600160a01b03909116600482015260008051602062003c9a83398151915292506306447d569150602401600060405180830381600087803b1580156200032557600080fd5b505af11580156200033a573d6000803e3d6000fd5b5050505062000348620003a0565b62000352620003e8565b6000805160206200e6ac83398151915260001c6001600160a01b03166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200023d57600080fd5b620003aa62001684565b620003b4620016d3565b620003be6200183b565b620003c862001a1c565b620003d262001ae3565b620003dc62001c44565b620003e662001d21565b565b6000805160206200e6ac83398151915260001c6001600160a01b031663b4d6c78273ca11bde05977b3631167028862be2a173976ca1160405180610f000160405280610ee081526020016201ef01610ee091396040518363ffffffff1660e01b81526004016200045a92919062002c04565b600060405180830381600087803b1580156200047557600080fd5b505af11580156200048a573d6000803e3d6000fd5b505050506000805160206200e6ac83398151915260001c6001600160a01b031663b4d6c7827313b0d85ccb8bf860b6b79af3029fca081ae9bef260405180610660016040528061063081526020016200e07c61063091396040518363ffffffff1660e01b81526004016200050092919062002c04565b600060405180830381600087803b1580156200051b57600080fd5b505af115801562000530573d6000803e3d6000fd5b505050506000805160206200e6ac83398151915260001c6001600160a01b031663b4d6c78273ba5ed099633d3b313e4d5f7bdc1305d3c28ba5ed60405180612e600160405280612e3e81526020016201407a612e3e91396040518363ffffffff1660e01b8152600401620005a692919062002c04565b600060405180830381600087803b158015620005c157600080fd5b505af1158015620005d6573d6000803e3d6000fd5b505050506000805160206200e6ac83398151915260001c6001600160a01b031663b4d6c7827369f4d1788e39c87893c980c06edf4b7f686e2938604051806159e001604052806159ae81526020016200e6cc6159ae91396040518363ffffffff1660e01b81526004016200064c92919062002c04565b600060405180830381600087803b1580156200066757600080fd5b505af11580156200067c573d6000803e3d6000fd5b505050506000805160206200e6ac83398151915260001c6001600160a01b031663b4d6c78273fb1bffc9d739b8d520daf37df666da4c687191ea60405180615d200160405280615cf8815260200162003cba615cf891396040518363ffffffff1660e01b8152600401620006f292919062002c04565b600060405180830381600087803b1580156200070d57600080fd5b505af115801562000722573d6000803e3d6000fd5b505050506000805160206200e6ac83398151915260001c6001600160a01b031663b4d6c78273a1dabef33b3b82c7814b6d82a79e50f4ac44102b604051806101c0016040528061019a81526020016200dcd261019a91396040518363ffffffff1660e01b81526004016200079892919062002c04565b600060405180830381600087803b158015620007b357600080fd5b505af1158015620007c8573d6000803e3d6000fd5b505050506000805160206200e6ac83398151915260001c6001600160a01b031663b4d6c78273914d7fec6aac8cd542e72bca78b30650d45643d760405180608001604052806045815260200162009b75604591396040518363ffffffff1660e01b81526004016200083b92919062002c04565b600060405180830381600087803b1580156200085657600080fd5b505af11580156200086b573d6000803e3d6000fd5b505050506000805160206200e6ac83398151915260001c6001600160a01b031663b4d6c782734e59b44847b379578588920ca78fbf26c0b4956c60405180608001604052806045815260200162009b75604591396040518363ffffffff1660e01b8152600401620008de92919062002c04565b600060405180830381600087803b158015620008f957600080fd5b505af11580156200090e573d6000803e3d6000fd5b505050506000805160206200e6ac83398151915260001c6001600160a01b031663b4d6c78273998739bfdaadde7c933b942a68053933098f9eda604051806102a00160405280610275815260200162009bba61027591396040518363ffffffff1660e01b81526004016200098492919062002c04565b600060405180830381600087803b1580156200099f57600080fd5b505af1158015620009b4573d6000803e3d6000fd5b5050600f5460008051602062003c9a833981519152925063b4d6c78291506e22d473030f116ddee9f6b43ac78ba390620009ee9062001e75565b6040518363ffffffff1660e01b815260040162000a0d92919062002c04565b600060405180830381600087803b15801562000a2857600080fd5b505af115801562000a3d573d6000803e3d6000fd5b505050506000805160206200e6ac83398151915260001c6001600160a01b031663b4d6c782737fc98430eaedbb6070b35b39d79872504908834860405180610240016040528061021081526020016200de6c61021091396040518363ffffffff1660e01b815260040162000ab392919062002c04565b600060405180830381600087803b15801562000ace57600080fd5b505af115801562000ae3573d6000803e3d6000fd5b505050506000805160206200e6ac83398151915260001c6001600160a01b031663b4d6c782735ff137d4b0fdcd49dca30c7cf57e578a026d278960405180615cc00160405280615c89815260200162019278615c8991396040518363ffffffff1660e01b815260040162000b5992919062002c04565b600060405180830381600087803b15801562000b7457600080fd5b505af115801562000b89573d6000803e3d6000fd5b505050506000805160206200e6ac83398151915260001c6001600160a01b031663b4d6c78273efc2c1444ebcc4db75e7613d20c6a62ff67a167c6040518061020001604052806101c38152602001620099b26101c391396040518363ffffffff1660e01b815260040162000bff92919062002c04565b600060405180830381600087803b15801562000c1a57600080fd5b505af115801562000c2f573d6000803e3d6000fd5b505050506000805160206200e6ac83398151915260001c6001600160a01b031663b4d6c7826f71727de22e5e9d8baf0edac6f37da03260405180613ee00160405280613ea3815260200162009e2f613ea391396040518363ffffffff1660e01b815260040162000ca192919062002c04565b600060405180830381600087803b15801562000cbc57600080fd5b505af115801562000cd1573d6000803e3d6000fd5b505050506000805160206200e6ac83398151915260001c6001600160a01b031663b4d6c782731820a4b7618bde71dce8cdc73aab6c95905fad2460405180610a0001604052806109c581526020016201fde16109c591396040518363ffffffff1660e01b815260040162000d4792919062002c04565b600060405180830381600087803b15801562000d6257600080fd5b505af115801562000d77573d6000803e3d6000fd5b505050506000805160206200e6ac83398151915260001c6001600160a01b031663b4d6c782720f3df6d732807ef1319fb7b8bb8522d0beac026040518060a0016040528060618152602001620207a6606191396040518363ffffffff1660e01b815260040162000de992919062002c04565b600060405180830381600087803b15801562000e0457600080fd5b505af115801562000e19573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003c9a833981519152925063f8e18b57915062000e6890730b799c86a49deeb90402691f1041aa3af2d3c8759060019060040162002c48565b600060405180830381600087803b15801562000e8357600080fd5b505af115801562000e98573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003c9a833981519152925063f8e18b57915062000ee79073ca11bde05977b3631167028862be2a173976ca119060019060040162002c48565b600060405180830381600087803b15801562000f0257600080fd5b505af115801562000f17573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003c9a833981519152925063f8e18b57915062000f66907313b0d85ccb8bf860b6b79af3029fca081ae9bef29060019060040162002c48565b600060405180830381600087803b15801562000f8157600080fd5b505af115801562000f96573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003c9a833981519152925063f8e18b57915062000fe59073ba5ed099633d3b313e4d5f7bdc1305d3c28ba5ed9060019060040162002c48565b600060405180830381600087803b1580156200100057600080fd5b505af115801562001015573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003c9a833981519152925063f8e18b57915062001064907369f4d1788e39c87893c980c06edf4b7f686e29389060019060040162002c48565b600060405180830381600087803b1580156200107f57600080fd5b505af115801562001094573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003c9a833981519152925063f8e18b579150620010e39073fb1bffc9d739b8d520daf37df666da4c687191ea9060019060040162002c48565b600060405180830381600087803b158015620010fe57600080fd5b505af115801562001113573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003c9a833981519152925063f8e18b579150620011629073a1dabef33b3b82c7814b6d82a79e50f4ac44102b9060019060040162002c48565b600060405180830381600087803b1580156200117d57600080fd5b505af115801562001192573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003c9a833981519152925063f8e18b579150620011e19073914d7fec6aac8cd542e72bca78b30650d45643d79060019060040162002c48565b600060405180830381600087803b158015620011fc57600080fd5b505af115801562001211573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003c9a833981519152925063f8e18b5791506200126090734e59b44847b379578588920ca78fbf26c0b4956c9060019060040162002c48565b600060405180830381600087803b1580156200127b57600080fd5b505af115801562001290573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003c9a833981519152925063f8e18b579150620012df9073998739bfdaadde7c933b942a68053933098f9eda9060019060040162002c48565b600060405180830381600087803b158015620012fa57600080fd5b505af11580156200130f573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003c9a833981519152925063f8e18b57915062001359906e22d473030f116ddee9f6b43ac78ba39060019060040162002c48565b600060405180830381600087803b1580156200137457600080fd5b505af115801562001389573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003c9a833981519152925063f8e18b579150620013d890737fc98430eaedbb6070b35b39d7987250490883489060019060040162002c48565b600060405180830381600087803b158015620013f357600080fd5b505af115801562001408573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003c9a833981519152925063f8e18b5791506200145790735ff137d4b0fdcd49dca30c7cf57e578a026d27899060019060040162002c48565b600060405180830381600087803b1580156200147257600080fd5b505af115801562001487573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003c9a833981519152925063f8e18b579150620014d69073efc2c1444ebcc4db75e7613d20c6a62ff67a167c9060019060040162002c48565b600060405180830381600087803b158015620014f157600080fd5b505af115801562001506573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003c9a833981519152925063f8e18b57915062001551906f71727de22e5e9d8baf0edac6f37da0329060019060040162002c48565b600060405180830381600087803b1580156200156c57600080fd5b505af115801562001581573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003c9a833981519152925063f8e18b579150620015d090731820a4b7618bde71dce8cdc73aab6c95905fad249060019060040162002c48565b600060405180830381600087803b158015620015eb57600080fd5b505af115801562001600573d6000803e3d6000fd5b505060405163f8e18b5760e01b815260008051602062003c9a833981519152925063f8e18b5791506200164e90720f3df6d732807ef1319fb7b8bb8522d0beac029060019060040162002c48565b600060405180830381600087803b1580156200166957600080fd5b505af11580156200167e573d6000803e3d6000fd5b50505050565b60006200169062001fab565b905060005b8151811015620016cf57620016c6828281518110620016b857620016b862002c6b565b602002602001015162002048565b60010162001695565b5050565b6000620016e9600162048789608a1b0162002484565b604051630fafdced60e21b815260206004820152602160248201527f506f7274616c52656769737472792e736f6c3a506f7274616c526567697374726044820152607960f81b606482015290915060008051602062003c9a8339815191529063b4d6c7829083908390633ebf73b490608401600060405180830381865afa15801562001779573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052620017a3919081019062002c81565b6040518363ffffffff1660e01b8152600401620017c292919062002c04565b600060405180830381600087803b158015620017dd57600080fd5b505af1158015620017f2573d6000803e3d6000fd5b5050505062001801816200255b565b600e5460405163189acdbd60e31b81526001600160a01b039091166004820152600162048789608a1b019063c4d66de89060240162000222565b60105460405163c88a5e6d60e01b8152600262048789608a1b016004820152602481019190915260008051602062003c9a8339815191529063c88a5e6d90604401600060405180830381600087803b1580156200189757600080fd5b505af1158015620018ac573d6000803e3d6000fd5b505050506000620018c6600262048789608a1b0162002484565b604051630fafdced60e21b815260206004820152602560248201527f4f6d6e694272696467654e61746976652e736f6c3a4f6d6e694272696467654e604482015264617469766560d81b606482015290915060008051602062003c9a8339815191529063b4d6c7829083908390633ebf73b490608401600060405180830381865afa1580156200195a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001984919081019062002c81565b6040518363ffffffff1660e01b8152600401620019a392919062002c04565b600060405180830381600087803b158015620019be57600080fd5b505af1158015620019d3573d6000803e3d6000fd5b50505050620019e2816200255b565b600d5460405163189acdbd60e31b81526001600160a01b039091166004820152600262048789608a1b019063c4d66de89060240162000222565b604051630fafdced60e21b815260206004820152600f60248201526e574f6d6e692e736f6c3a574f6d6e6960881b604482015260008051602062003c9a8339815191529063b4d6c78290600362048789608a1b01908390633ebf73b490606401600060405180830381865afa15801562001a9a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001ac4919081019062002c81565b6040518363ffffffff1660e01b81526004016200164e92919062002c04565b600062001af9600162333333608a1b0162002484565b604051630fafdced60e21b81526020600482015260136024820152725374616b696e672e736f6c3a5374616b696e6760681b604482015290915060008051602062003c9a8339815191529063b4d6c7829083908390633ebf73b490606401600060405180830381865afa15801562001b75573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001b9f919081019062002c81565b6040518363ffffffff1660e01b815260040162001bbe92919062002c04565b600060405180830381600087803b15801562001bd957600080fd5b505af115801562001bee573d6000803e3d6000fd5b5050505062001bfd816200255b565b600d5460115460405163400ada7560e01b81526001600160a01b03909216600483015260ff1615156024820152600162333333608a1b019063400ada759060440162000222565b600062001c5a600262333333608a1b0162002484565b604051630fafdced60e21b8152602060048201526015602482015274536c617368696e672e736f6c3a536c617368696e6760581b604482015290915060008051602062003c9a8339815191529063b4d6c7829083908390633ebf73b490606401600060405180830381865afa15801562001cd8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001d02919081019062002c81565b6040518363ffffffff1660e01b81526004016200022292919062002c04565b600062001d37600362333333608a1b0162002484565b604051630fafdced60e21b8152602060048201526013602482015272557067726164652e736f6c3a5570677261646560681b604482015290915060008051602062003c9a8339815191529063b4d6c7829083908390633ebf73b490606401600060405180830381865afa15801562001db3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001ddd919081019062002c81565b6040518363ffffffff1660e01b815260040162001dfc92919062002c04565b600060405180830381600087803b15801562001e1757600080fd5b505af115801562001e2c573d6000803e3d6000fd5b5050505062001e3b816200255b565b600e5460405163189acdbd60e31b81526001600160a01b039091166004820152600362333333608a1b019063c4d66de89060240162000222565b6060600060405160200162001e9790662832b936b4ba1960c91b815260070190565b604051602081830303815290604052805190602001209050600060405160200162001f17907f454950373132446f6d61696e28737472696e67206e616d652c75696e7432353681527f20636861696e49642c6164647265737320766572696679696e67436f6e74726160208201526263742960e81b604082015260430190565b60408051601f198184030181528282528051602091820120908301819052908201849052606082018690526e22d473030f116ddee9f6b43ac78ba36080830152915060009060a001604051602081830303815290604052805190602001209050604051806123e001604052806123c0815260200162016eb86123c09139611b41810195909552611b67850152509192915050565b604080516002808252606080830184529260208301908036833701905050905062048789608a1b8160008151811062001fe85762001fe862002c6b565b60200260200101906001600160a01b031690816001600160a01b03168152505062333333608a1b8160018151811062002025576200202562002c6b565b60200260200101906001600160a01b031690816001600160a01b03168152505090565b63ffffffff811615620020965760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964206e616d65737061636560781b60448201526064015b60405180910390fd5b60015b610400816001600160a01b0316116200244e576000620020ba828462002d50565b9050600362048789608a1b016001600160a01b03821603620020dd575062002439565b6000620020ea82620025cb565b620020f757600062002102565b620021028262002484565b90506001600160a01b0381163b15620021515760405162461bcd60e51b815260206004820152601060248201526f1a5b5c1b08185b1c9958591e481cd95d60821b60448201526064016200208d565b60408051635a6b63c160e11b81526001600160a01b038316600482015260248101919091526002604482015261030360f41b606482015260008051602062003c9a8339815191529063b4d6c78290608401600060405180830381600087803b158015620021bd57600080fd5b505af1158015620021d2573d6000803e3d6000fd5b5050600e54604051600093508492506001600160a01b0390911690620021f8906200285c565b6001600160a01b03928316815291166020820152606060408201819052600090820152608001604051809103906000f0801580156200223b573d6000803e3d6000fd5b5090506000805160206200e6ac83398151915260001c6001600160a01b031663b4d6c78284836001600160a01b0316803b806020016040519081016040528181526000908060200190933c6040518363ffffffff1660e01b8152600401620022a592919062002c04565b600060405180830381600087803b158015620022c057600080fd5b505af1158015620022d5573d6000803e3d6000fd5b50505050620022e5838362002678565b620022fb83620022f58362002715565b620027b8565b604051635a6b63c160e11b815260008051602062003c9a8339815191529063b4d6c782906200232f908590600401620028af565b600060405180830381600087803b1580156200234a57600080fd5b505af11580156200235f573d6000803e3d6000fd5b5050604051635a6b63c160e11b815260008051602062003c9a833981519152925063b4d6c782915062002397908490600401620028af565b600060405180830381600087803b158015620023b257600080fd5b505af1158015620023c7573d6000803e3d6000fd5b5050604051631c72346d60e01b81526001600160a01b038416600482015260008051602062003c9a8339815191529250631c72346d9150602401600060405180830381600087803b1580156200241c57600080fd5b505af115801562002431573d6000803e3d6000fd5b505050505050505b80620024458162002d7a565b91505062002099565b50604051635a6b63c160e11b815260008051602062003c9a8339815191529063b4d6c782906200022290600090600401620028af565b6000620024918262002822565b620024df5760405162461bcd60e51b815260206004820152601b60248201527f5072656465706c6f79733a206e6f742061207072656465706c6f79000000000060448201526064016200208d565b600362048789608a1b016001600160a01b03831603620025425760405162461bcd60e51b815260206004820152601760248201527f5072656465706c6f79733a206e6f742070726f7869656400000000000000000060448201526064016200208d565b62002555826001600160a01b0362002dab565b92915050565b6040516370ca10bb60e01b81526001600160a01b03821660048201527ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00602482015267ffffffffffffffff604482015260008051602062003c9a833981519152906370ca10bb9060640162000222565b60006001600160a01b038216600162048789608a1b011480620025ff57506001600160a01b038216600262048789608a1b01145b806200261c57506001600160a01b038216600362048789608a1b01145b806200263957506001600160a01b038216600162333333608a1b01145b806200265657506001600160a01b038216600262333333608a1b01145b806200255557506001600160a01b038216600362333333608a1b011492915050565b6040516370ca10bb60e01b81526001600160a01b0380841660048301527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60248301528216604482015260008051602062003c9a833981519152906370ca10bb906064015b600060405180830381600087803b158015620026f857600080fd5b505af11580156200270d573d6000803e3d6000fd5b505050505050565b604051630667f9d760e41b81526001600160a01b03821660048201527fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103602482015260009060008051602062003c9a8339815191529063667f9d7090604401602060405180830381865afa15801562002792573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002555919062002dce565b6040516370ca10bb60e01b81526001600160a01b0380841660048301527fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610360248301528216604482015260008051602062003c9a833981519152906370ca10bb90606401620026dd565b60006001600160961b03600a83901c166204878960801b1480620025555750506233333360801b600a9190911c6001600160961b03161490565b610eb18062002de983390190565b6000602082840312156200287d57600080fd5b813567ffffffffffffffff8111156200289557600080fd5b820160c08185031215620028a857600080fd5b9392505050565b6001600160a01b0391909116815260406020820181905260009082015260600190565b600181811c90821680620028e757607f821691505b6020821081036200290857634e487b7160e01b600052602260045260246000fd5b50919050565b60006020808352600084546200292481620028d2565b8060208701526040600180841660008114620029495760018114620029665762002998565b60ff19851660408a0152604084151560051b8a0101955062002998565b89600052602060002060005b858110156200298f5781548b820186015290830190880162002972565b8a016040019650505b509398975050505050505050565b600081356001600160a01b03811681146200255557600080fd5b80546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b601f82111562002a42576000816000526020600020601f850160051c8101602086101562002a215750805b601f850160051c820191505b818110156200270d5782815560010162002a2d565b505050565b67ffffffffffffffff83111562002a625762002a62620029e0565b62002a7a8362002a738354620028d2565b83620029f6565b6000601f84116001811462002ab1576000851562002a985750838201355b600019600387901b1c1916600186901b17835562000252565b600083815260209020601f19861690835b8281101562002ae4578685013582556020948501946001909201910162002ac2565b508682101562002b025760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b62002b2a62002b2383620029a6565b82620029c0565b62002b4662002b3c60208401620029a6565b60018301620029c0565b604082013560028201556060820135600382015560048101608083013580151580821462002b7357600080fd5b60ff19835416915060ff81168217835550505060a0820135601e1983360301811262002b9e57600080fd5b8201803567ffffffffffffffff81111562002bb857600080fd5b60208201915080360382131562002bce57600080fd5b6200167e81836005860162002a47565b60005b8381101562002bfb57818101518382015260200162002be1565b50506000910152565b60018060a01b0383168152604060208201526000825180604084015262002c3381606085016020870162002bde565b601f01601f1916919091016060019392505050565b6001600160a01b0392909216825267ffffffffffffffff16602082015260400190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121562002c9457600080fd5b815167ffffffffffffffff8082111562002cad57600080fd5b818401915084601f83011262002cc257600080fd5b81518181111562002cd75762002cd7620029e0565b604051601f8201601f19908116603f0116810190838211818310171562002d025762002d02620029e0565b8160405282815287602084870101111562002d1c57600080fd5b62002d2f83602083016020880162002bde565b979650505050505050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381811683821601908082111562002d735762002d7362002d3a565b5092915050565b60006001600160a01b038281166002600160a01b0319810162002da15762002da162002d3a565b6001019392505050565b6001600160a01b0382811682821603908082111562002d735762002d7362002d3a565b60006020828403121562002de157600080fd5b505191905056fe60a060405260405162000eb138038062000eb18339810160408190526200002691620003cd565b82816200003482826200009c565b505081604051620000459062000366565b6001600160a01b039091168152602001604051809103906000f08015801562000072573d6000803e3d6000fd5b506001600160a01b0316608052620000936200008d60805190565b62000102565b505050620004cb565b620000a78262000174565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115620000f457620000ef8282620001f4565b505050565b620000fe62000271565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014460008051602062000e91833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a1620001718162000293565b50565b806001600160a01b03163b600003620001b057604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080846001600160a01b031684604051620002139190620004ad565b600060405180830381855af49150503d806000811462000250576040519150601f19603f3d011682016040523d82523d6000602084013e62000255565b606091505b50909250905062000268858383620002d6565b95945050505050565b3415620002915760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b038116620002bf57604051633173bdd160e11b815260006004820152602401620001a7565b8060008051602062000e91833981519152620001d3565b606082620002ef57620002e9826200033c565b62000335565b81511580156200030757506001600160a01b0384163b155b156200033257604051639996b31560e01b81526001600160a01b0385166004820152602401620001a7565b50805b9392505050565b8051156200034d5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b610524806200096d83390190565b80516001600160a01b03811681146200038c57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620003c4578181015183820152602001620003aa565b50506000910152565b600080600060608486031215620003e357600080fd5b620003ee8462000374565b9250620003fe6020850162000374565b60408501519092506001600160401b03808211156200041c57600080fd5b818601915086601f8301126200043157600080fd5b81518181111562000446576200044662000391565b604051601f8201601f19908116603f0116810190838211818310171562000471576200047162000391565b816040528281528960208487010111156200048b57600080fd5b6200049e836020830160208801620003a7565b80955050505050509250925092565b60008251620004c1818460208701620003a7565b9190910192915050565b608051610487620004e66000396000601001526104876000f3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361007b576000356001600160e01b03191663278f794360e11b14610071576040516334ad5dbb60e21b815260040160405180910390fd5b610079610083565b565b6100796100b2565b6000806100933660048184610312565b8101906100a09190610352565b915091506100ae82826100c2565b5050565b6100796100bd61011d565b610155565b6100cb82610179565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156101155761011082826101f5565b505050565b6100ae61026b565b60006101507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e808015610174573d6000f35b3d6000fd5b806001600160a01b03163b6000036101b457604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516102129190610422565b600060405180830381855af49150503d806000811461024d576040519150601f19603f3d011682016040523d82523d6000602084013e610252565b606091505b509150915061026285838361028a565b95945050505050565b34156100795760405163b398979f60e01b815260040160405180910390fd5b60608261029f5761029a826102e9565b6102e2565b81511580156102b657506001600160a01b0384163b155b156102df57604051639996b31560e01b81526001600160a01b03851660048201526024016101ab565b50805b9392505050565b8051156102f95780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6000808585111561032257600080fd5b8386111561032f57600080fd5b5050820193919092039150565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561036557600080fd5b82356001600160a01b038116811461037c57600080fd5b9150602083013567ffffffffffffffff8082111561039957600080fd5b818501915085601f8301126103ad57600080fd5b8135818111156103bf576103bf61033c565b604051601f8201601f19908116603f011681019083821181831017156103e7576103e761033c565b8160405282815288602084870101111561040057600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000825160005b818110156104435760208186018101518583015201610429565b50600092019182525091905056fea26469706673582212200a3330bfe03a9656e4ac9fc33b82496617c9f6e3b6d624e79c4b7c2828b0a14164736f6c63430008180033608060405234801561001057600080fd5b5060405161052438038061052483398101604081905261002f916100be565b806001600160a01b03811661005e57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100678161006e565b50506100ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100d057600080fd5b81516001600160a01b03811681146100e757600080fd5b9392505050565b610427806100fd6000396000f3fe60806040526004361061004a5760003560e01c8063715018a61461004f5780638da5cb5b146100665780639623609d14610093578063ad3cb1cc146100a6578063f2fde38b146100e4575b600080fd5b34801561005b57600080fd5b50610064610104565b005b34801561007257600080fd5b506000546040516001600160a01b0390911681526020015b60405180910390f35b6100646100a1366004610272565b610118565b3480156100b257600080fd5b506100d7604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161008a919061038e565b3480156100f057600080fd5b506100646100ff3660046103a8565b610187565b61010c6101ca565b61011660006101f7565b565b6101206101ca565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061015090869086906004016103c5565b6000604051808303818588803b15801561016957600080fd5b505af115801561017d573d6000803e3d6000fd5b5050505050505050565b61018f6101ca565b6001600160a01b0381166101be57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101c7816101f7565b50565b6000546001600160a01b031633146101165760405163118cdaa760e01b81523360048201526024016101b5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101c757600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561028757600080fd5b833561029281610247565b925060208401356102a281610247565b9150604084013567ffffffffffffffff808211156102bf57600080fd5b818601915086601f8301126102d357600080fd5b8135818111156102e5576102e561025c565b604051601f8201601f19908116603f0116810190838211818310171561030d5761030d61025c565b8160405282815289602084870101111561032657600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6000815180845260005b8181101561036e57602081850181015186830182015201610352565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006103a16020830184610348565b9392505050565b6000602082840312156103ba57600080fd5b81356103a181610247565b6001600160a01b03831681526040602082018190526000906103e990830184610348565b94935050505056fea26469706673582212203e644249bd999cbe37c6c93843add180d0c31ce0f908a02409c401cd5f18ab8764736f6c63430008180033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61030000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12d6080604052600436106101dc5760003560e01c8063affed0e011610102578063e19a9dd911610095578063f08a032311610064578063f08a032314611647578063f698da2514611698578063f8dc5dd9146116c3578063ffa1ad741461173e57610231565b8063e19a9dd91461139b578063e318b52b146113ec578063e75235b81461147d578063e86637db146114a857610231565b8063cc2f8452116100d1578063cc2f8452146110e8578063d4d9bdcd146111b5578063d8d11f78146111f0578063e009cfde1461132a57610231565b8063affed0e014610d94578063b4faba0914610dbf578063b63e800d14610ea7578063c4ca3a9c1461101757610231565b80635624b25b1161017a5780636a761202116101495780636a761202146109945780637d83297414610b50578063934f3a1114610bbf578063a0e67e2b14610d2857610231565b80635624b25b146107fb5780635ae6bd37146108b9578063610b592514610908578063694e80c31461095957610231565b80632f54bf6e116101b65780632f54bf6e146104d35780633408e4701461053a578063468721a7146105655780635229073f1461067a57610231565b80630d582f131461029e57806312fb68e0146102f95780632d9ad53d1461046c57610231565b36610231573373ffffffffffffffffffffffffffffffffffffffff167f3d0ce9bfc3ed7d6862dbb28b2dea94561fe714a1b4d019aa8af39730d1ad7c3d346040518082815260200191505060405180910390a2005b34801561023d57600080fd5b5060007f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d560001b905080548061027257600080f35b36600080373360601b365260008060143601600080855af13d6000803e80610299573d6000fd5b3d6000f35b3480156102aa57600080fd5b506102f7600480360360408110156102c157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506117ce565b005b34801561030557600080fd5b5061046a6004803603608081101561031c57600080fd5b81019080803590602001909291908035906020019064010000000081111561034357600080fd5b82018360208201111561035557600080fd5b8035906020019184600183028401116401000000008311171561037757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156103da57600080fd5b8201836020820111156103ec57600080fd5b8035906020019184600183028401116401000000008311171561040e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050611bbe565b005b34801561047857600080fd5b506104bb6004803603602081101561048f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612440565b60405180821515815260200191505060405180910390f35b3480156104df57600080fd5b50610522600480360360208110156104f657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612512565b60405180821515815260200191505060405180910390f35b34801561054657600080fd5b5061054f6125e4565b6040518082815260200191505060405180910390f35b34801561057157600080fd5b506106626004803603608081101561058857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156105cf57600080fd5b8201836020820111156105e157600080fd5b8035906020019184600183028401116401000000008311171561060357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803560ff1690602001909291905050506125f1565b60405180821515815260200191505060405180910390f35b34801561068657600080fd5b506107776004803603608081101561069d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156106e457600080fd5b8201836020820111156106f657600080fd5b8035906020019184600183028401116401000000008311171561071857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803560ff1690602001909291905050506126fc565b60405180831515815260200180602001828103825283818151815260200191508051906020019080838360005b838110156107bf5780820151818401526020810190506107a4565b50505050905090810190601f1680156107ec5780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b34801561080757600080fd5b5061083e6004803603604081101561081e57600080fd5b810190808035906020019092919080359060200190929190505050612732565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561087e578082015181840152602081019050610863565b50505050905090810190601f1680156108ab5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156108c557600080fd5b506108f2600480360360208110156108dc57600080fd5b81019080803590602001909291905050506127b9565b6040518082815260200191505060405180910390f35b34801561091457600080fd5b506109576004803603602081101561092b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506127d1565b005b34801561096557600080fd5b506109926004803603602081101561097c57600080fd5b8101908080359060200190929190505050612b63565b005b610b3860048036036101408110156109ab57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156109f257600080fd5b820183602082011115610a0457600080fd5b80359060200191846001830284011164010000000083111715610a2657600080fd5b9091929391929390803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610ab257600080fd5b820183602082011115610ac457600080fd5b80359060200191846001830284011164010000000083111715610ae657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612c9d565b60405180821515815260200191505060405180910390f35b348015610b5c57600080fd5b50610ba960048036036040811015610b7357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612edc565b6040518082815260200191505060405180910390f35b348015610bcb57600080fd5b50610d2660048036036060811015610be257600080fd5b810190808035906020019092919080359060200190640100000000811115610c0957600080fd5b820183602082011115610c1b57600080fd5b80359060200191846001830284011164010000000083111715610c3d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610ca057600080fd5b820183602082011115610cb257600080fd5b80359060200191846001830284011164010000000083111715610cd457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612f01565b005b348015610d3457600080fd5b50610d3d612f90565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610d80578082015181840152602081019050610d65565b505050509050019250505060405180910390f35b348015610da057600080fd5b50610da9613139565b6040518082815260200191505060405180910390f35b348015610dcb57600080fd5b50610ea560048036036040811015610de257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610e1f57600080fd5b820183602082011115610e3157600080fd5b80359060200191846001830284011164010000000083111715610e5357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061313f565b005b348015610eb357600080fd5b506110156004803603610100811015610ecb57600080fd5b8101908080359060200190640100000000811115610ee857600080fd5b820183602082011115610efa57600080fd5b80359060200191846020830284011164010000000083111715610f1c57600080fd5b909192939192939080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610f6757600080fd5b820183602082011115610f7957600080fd5b80359060200191846001830284011164010000000083111715610f9b57600080fd5b9091929391929390803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613161565b005b34801561102357600080fd5b506110d26004803603608081101561103a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561108157600080fd5b82018360208201111561109357600080fd5b803590602001918460018302840111640100000000831117156110b557600080fd5b9091929391929390803560ff16906020019092919050505061331f565b6040518082815260200191505060405180910390f35b3480156110f457600080fd5b506111416004803603604081101561110b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613447565b60405180806020018373ffffffffffffffffffffffffffffffffffffffff168152602001828103825284818151815260200191508051906020019060200280838360005b838110156111a0578082015181840152602081019050611185565b50505050905001935050505060405180910390f35b3480156111c157600080fd5b506111ee600480360360208110156111d857600080fd5b8101908080359060200190929190505050613639565b005b3480156111fc57600080fd5b50611314600480360361014081101561121457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561125b57600080fd5b82018360208201111561126d57600080fd5b8035906020019184600183028401116401000000008311171561128f57600080fd5b9091929391929390803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506137d8565b6040518082815260200191505060405180910390f35b34801561133657600080fd5b506113996004803603604081101561134d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613805565b005b3480156113a757600080fd5b506113ea600480360360208110156113be57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613b96565b005b3480156113f857600080fd5b5061147b6004803603606081101561140f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613c1a565b005b34801561148957600080fd5b5061149261428c565b6040518082815260200191505060405180910390f35b3480156114b457600080fd5b506115cc60048036036101408110156114cc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561151357600080fd5b82018360208201111561152557600080fd5b8035906020019184600183028401116401000000008311171561154757600080fd5b9091929391929390803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050614296565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561160c5780820151818401526020810190506115f1565b50505050905090810190601f1680156116395780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561165357600080fd5b506116966004803603602081101561166a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061443e565b005b3480156116a457600080fd5b506116ad61449f565b6040518082815260200191505060405180910390f35b3480156116cf57600080fd5b5061173c600480360360608110156116e657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061451d565b005b34801561174a57600080fd5b50611753614950565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015611793578082015181840152602081019050611778565b50505050905090810190601f1680156117c05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6117d6614989565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156118405750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561187857503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b6118ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60026000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160026000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506003600081548092919060010191905055507f9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea2682604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a18060045414611bba57611bb981612b63565b5b5050565b611bd2604182614a2c90919063ffffffff16565b82511015611c48576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000808060008060005b8681101561243457611c648882614a66565b80945081955082965050505060008460ff16141561206d578260001c9450611c96604188614a2c90919063ffffffff16565b8260001c1015611d0e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8751611d2760208460001c614a9590919063ffffffff16565b1115611d9b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60006020838a01015190508851611dd182611dc360208760001c614a9590919063ffffffff16565b614a9590919063ffffffff16565b1115611e45576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60606020848b010190506320c13b0b60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168773ffffffffffffffffffffffffffffffffffffffff166320c13b0b8d846040518363ffffffff1660e01b8152600401808060200180602001838103835285818151815260200191508051906020019080838360005b83811015611ee7578082015181840152602081019050611ecc565b50505050905090810190601f168015611f145780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015611f4d578082015181840152602081019050611f32565b50505050905090810190601f168015611f7a5780820380516001836020036101000a031916815260200191505b5094505050505060206040518083038186803b158015611f9957600080fd5b505afa158015611fad573d6000803e3d6000fd5b505050506040513d6020811015611fc357600080fd5b81019080805190602001909291905050507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612066576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b50506122b2565b60018460ff161415612181578260001c94508473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061210a57506000600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008c81526020019081526020016000205414155b61217c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323500000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6122b1565b601e8460ff1611156122495760018a60405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c018281526020019150506040516020818303038152906040528051906020012060048603858560405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612238573d6000803e3d6000fd5b5050506020604051035194506122b0565b60018a85858560405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156122a3573d6000803e3d6000fd5b5050506020604051035194505b5b5b8573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161180156123795750600073ffffffffffffffffffffffffffffffffffffffff16600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b80156123b25750600173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b612424576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323600000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8495508080600101915050611c52565b50505050505050505050565b60008173ffffffffffffffffffffffffffffffffffffffff16600173ffffffffffffffffffffffffffffffffffffffff161415801561250b5750600073ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b6000600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156125dd5750600073ffffffffffffffffffffffffffffffffffffffff16600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b6000804690508091505090565b60007fb648d3644f584ed1c2232d53c46d87e693586486ad0d1175f8656013110b714e3386868686604051808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018060200183600181111561266b57fe5b8152602001828103825284818151815260200191508051906020019080838360005b838110156126a857808201518184015260208101905061268d565b50505050905090810190601f1680156126d55780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a16126f285858585614ab4565b9050949350505050565b6000606061270c868686866125f1565b915060405160203d0181016040523d81523d6000602083013e8091505094509492505050565b606060006020830267ffffffffffffffff8111801561275057600080fd5b506040519080825280601f01601f1916602001820160405280156127835781602001600182028036833780820191505090505b50905060005b838110156127ae57808501548060208302602085010152508080600101915050612789565b508091505092915050565b60076020528060005260406000206000915090505481565b6127d9614989565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156128435750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b6128b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f844081604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b612b6b614989565b600354811115612be3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001811015612c5a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b806004819055507f610f7ff2b304ae8903c3de74c60c6ab1f7d6226b3f52c5161905bb5ad4039c936004546040518082815260200191505060405180910390a150565b6000606060055433600454604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001935050505060405160208183030381529060405290507f66753cd2356569ee081232e3be8909b950e0a76c1f8460c3a5e3c2be32b11bed8d8d8d8d8d8d8d8d8d8d8d8c604051808d73ffffffffffffffffffffffffffffffffffffffff1681526020018c8152602001806020018a6001811115612d5057fe5b81526020018981526020018881526020018781526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff168152602001806020018060200184810384528e8e82818152602001925080828437600081840152601f19601f820116905080830192505050848103835286818151815260200191508051906020019080838360005b83811015612e0a578082015181840152602081019050612def565b50505050905090810190601f168015612e375780820380516001836020036101000a031916815260200191505b50848103825285818151815260200191508051906020019080838360005b83811015612e70578082015181840152602081019050612e55565b50505050905090810190601f168015612e9d5780820380516001836020036101000a031916815260200191505b509f5050505050505050505050505050505060405180910390a1612eca8d8d8d8d8d8d8d8d8d8d8d614c9a565b9150509b9a5050505050505050505050565b6008602052816000526040600020602052806000526040600020600091509150505481565b6000600454905060008111612f7e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b612f8a84848484611bbe565b50505050565b6060600060035467ffffffffffffffff81118015612fad57600080fd5b50604051908082528060200260200182016040528015612fdc5781602001602082028036833780820191505090505b50905060008060026000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614613130578083838151811061308757fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508180600101925050613046565b82935050505090565b60055481565b600080825160208401855af4806000523d6020523d600060403e60403d016000fd5b6131ac8a8a80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050896151d7565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146131ea576131e9846156d7565b5b6132388787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050615706565b60008211156132525761325082600060018685615941565b505b3373ffffffffffffffffffffffffffffffffffffffff167f141df868a6331af528e38c83b7aa03edc19be66e37ae67f9285bf4f8e3c6a1a88b8b8b8b8960405180806020018581526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281038252878782818152602001925060200280828437600081840152601f19601f820116905080830192505050965050505050505060405180910390a250505050505050505050565b6000805a9050613376878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050865a615b47565b61337f57600080fd5b60005a8203905080604051602001808281526020019150506040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561340c5780820151818401526020810190506133f1565b50505050905090810190601f1680156134395780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b606060008267ffffffffffffffff8111801561346257600080fd5b506040519080825280602002602001820160405280156134915781602001602082028036833780820191505090505b509150600080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156135645750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561356f57508482105b1561362a578084838151811061358157fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081806001019250506134fa565b80925081845250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff16600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561373b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330333000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16817ff2a0eb156472d1440255b0d7c1e19cc07115d1051fe605b0dce69acfec884d9c60405160405180910390a350565b60006137ed8c8c8c8c8c8c8c8c8c8c8c614296565b8051906020012090509b9a5050505050505050505050565b61380d614989565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156138775750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b6138e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146139e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507faab4fa2b463f581b2b32cb3b7e3b704b9ce37cc209b5fb4d77e593ace405427681604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b613b9e614989565b60007f4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c860001b90508181557f1151116914515bc0891ff9047a6cb32cf902546f83066499bcf8ba33d2353fa282604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b613c22614989565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015613c8c5750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b8015613cc457503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b613d36576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613e37576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015613ea15750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b613f13576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614614013576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303500000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507ff8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf82604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a17f9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea2681604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1505050565b6000600454905090565b606060007fbb8310d486368db6bd6f849402fdd73ad53d316b5a4b2644ad6efe0f941286d860001b8d8d8d8d60405180838380828437808301925050509250505060405180910390208c8c8c8c8c8c8c604051602001808c81526020018b73ffffffffffffffffffffffffffffffffffffffff1681526020018a815260200189815260200188600181111561432757fe5b81526020018781526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019b505050505050505050505050604051602081830303815290604052805190602001209050601960f81b600160f81b6143b361449f565b8360405160200180857effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152600101847effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018381526020018281526020019450505050506040516020818303038152906040529150509b9a5050505050505050505050565b614446614989565b61444f816156d7565b7f5ac6c46c93c8d0e53714ba3b53db3e7c046da994313d7ed0d192028bc7c228b081604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b60007f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a7946921860001b6144cd6125e4565b30604051602001808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405160208183030381529060405280519060200120905090565b614525614989565b8060016003540310156145a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561460a5750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b61467c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461477c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303500000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360008154809291906001900391905055507ff8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf82604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1806004541461494b5761494a81612b63565b5b505050565b6040518060400160405280600581526020017f312e332e3000000000000000000000000000000000000000000000000000000081525081565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614614a2a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330333100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b565b600080831415614a3f5760009050614a60565b6000828402905082848281614a5057fe5b0414614a5b57600080fd5b809150505b92915050565b60008060008360410260208101860151925060408101860151915060ff60418201870151169350509250925092565b600080828401905083811015614aaa57600080fd5b8091505092915050565b6000600173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015614b7f5750600073ffffffffffffffffffffffffffffffffffffffff16600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b614bf1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b614bfe858585855a615b47565b90508015614c4e573373ffffffffffffffffffffffffffffffffffffffff167f6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb860405160405180910390a2614c92565b3373ffffffffffffffffffffffffffffffffffffffff167facd2c8702804128fdb0db2bb49f6d127dd0181c13fd45dbfe16de0930e2bd37560405160405180910390a25b949350505050565b6000806000614cb48e8e8e8e8e8e8e8e8e8e600554614296565b905060056000815480929190600101919050555080805190602001209150614cdd828286612f01565b506000614ce8615b93565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614614ece578073ffffffffffffffffffffffffffffffffffffffff166375f0bb528f8f8f8f8f8f8f8f8f8f8f336040518d63ffffffff1660e01b8152600401808d73ffffffffffffffffffffffffffffffffffffffff1681526020018c8152602001806020018a6001811115614d8b57fe5b81526020018981526020018881526020018781526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff168152602001806020018473ffffffffffffffffffffffffffffffffffffffff16815260200183810383528d8d82818152602001925080828437600081840152601f19601f820116905080830192505050838103825285818151815260200191508051906020019080838360005b83811015614e5d578082015181840152602081019050614e42565b50505050905090810190601f168015614e8a5780820380516001836020036101000a031916815260200191505b509e505050505050505050505050505050600060405180830381600087803b158015614eb557600080fd5b505af1158015614ec9573d6000803e3d6000fd5b505050505b6101f4614ef56109c48b01603f60408d0281614ee657fe5b04615bc490919063ffffffff16565b015a1015614f6b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60005a9050614fd48f8f8f8f8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508e60008d14614fc9578e614fcf565b6109c45a035b615b47565b9350614fe95a82615bde90919063ffffffff16565b90508380614ff8575060008a14155b80615004575060008814155b615076576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000808911156150905761508d828b8b8b8b615941565b90505b84156150da577f442e715f626346e8c54381002da614f62bee8d27386535b2521ec8540898556e8482604051808381526020018281526020019250505060405180910390a161511a565b7f23428b18acfb3ea64b08dc0c1d296ea9c09702c09083ca5272e64d115b687d238482604051808381526020018281526020019250505060405180910390a15b5050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146151c6578073ffffffffffffffffffffffffffffffffffffffff16639327136883856040518363ffffffff1660e01b815260040180838152602001821515815260200192505050600060405180830381600087803b1580156151ad57600080fd5b505af11580156151c1573d6000803e3d6000fd5b505050505b50509b9a5050505050505050505050565b60006004541461524f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b81518111156152c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600181101561533d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60006001905060005b835181101561564357600084828151811061535d57fe5b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156153d15750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561540957503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561544157508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b6154b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146155b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550809250508080600101915050615346565b506001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550825160038190555081600481905550505050565b60007f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d560001b90508181555050565b600073ffffffffffffffffffffffffffffffffffffffff1660016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614615808576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001806000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461593d576158ca8260008360015a615b47565b61593c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330303000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b5b5050565b600080600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461597e5782615980565b325b9050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415615a98576159ea3a86106159c7573a6159c9565b855b6159dc888a614a9590919063ffffffff16565b614a2c90919063ffffffff16565b91508073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050615a93576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b615b3d565b615abd85615aaf888a614a9590919063ffffffff16565b614a2c90919063ffffffff16565b9150615aca848284615bfe565b615b3c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b5b5095945050505050565b6000600180811115615b5557fe5b836001811115615b6157fe5b1415615b7a576000808551602087018986f49050615b8a565b600080855160208701888a87f190505b95945050505050565b6000807f4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c860001b9050805491505090565b600081831015615bd45781615bd6565b825b905092915050565b600082821115615bed57600080fd5b600082840390508091505092915050565b60008063a9059cbb8484604051602401808373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001925050506040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050602060008251602084016000896127105a03f13d60008114615ca55760208114615cad5760009350615cb8565b819350615cb8565b600051158215171593505b505050939250505056fea2646970667358221220047fac33099ca576d1c4f1ac6a8abdb0396e42ad6a397d2cb2f4dc1624cc0c5b64736f6c634300070600336080600436101561000f57600080fd5b6000803560e01c63570e1a361461002557600080fd5b3461018a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018a576004359167ffffffffffffffff9081841161018657366023850112156101865783600401358281116101825736602482870101116101825780601411610182577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec810192808411610155577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f81600b8501160116830190838210908211176101555792846024819482600c60209a968b9960405286845289840196603889018837830101525193013560601c5af1908051911561014d575b5073ffffffffffffffffffffffffffffffffffffffff60405191168152f35b90503861012e565b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b8380fd5b8280fd5b80fdfea26469706673582212207adef8895ad3393b02fab10a111d85ea80ff35366aa43995f4ea20e67f29200664736f6c634300081700337fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf360806040526004361061001e5760003560e01c80638d80ff0a14610023575b600080fd5b6100dc6004803603602081101561003957600080fd5b810190808035906020019064010000000081111561005657600080fd5b82018360208201111561006857600080fd5b8035906020019184600183028401116401000000008311171561008a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506100de565b005b7f000000000000000000000000998739bfdaadde7c933b942a68053933098f9eda73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610183576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806102106030913960400191505060405180910390fd5b805160205b8181101561020a578083015160f81c6001820184015160601c6015830185015160358401860151605585018701600085600081146101cd57600181146101dd576101e8565b6000808585888a5af191506101e8565b6000808585895af491505b5060008114156101f757600080fd5b8260550187019650505050505050610188565b50505056fe4d756c746953656e642073686f756c64206f6e6c792062652063616c6c6564207669612064656c656761746563616c6ca26469706673582212205c784303626eec02b71940b551976170b500a8a36cc5adcbeb2c19751a76d05464736f6c6343000706003360806040526004361015610024575b361561001957600080fd5b61002233612748565b005b60003560e01c806242dc5314611b0057806301ffc9a7146119ae5780630396cb60146116765780630bd28e3b146115fa5780631b2e01b814611566578063205c2878146113d157806322cdde4c1461136b57806335567e1a146112b35780635287ce12146111a557806370a0823114611140578063765e827f14610e82578063850aaf6214610dc35780639b249f6914610c74578063b760faf914610c3a578063bb9fe6bf14610a68578063c23a5cea146107c4578063dbed18e0146101a15763fc7e286d0361000e573461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5773ffffffffffffffffffffffffffffffffffffffff61013a61229f565b16600052600060205260a0604060002065ffffffffffff6001825492015460405192835260ff8116151560208401526dffffffffffffffffffffffffffff8160081c16604084015263ffffffff8160781c16606084015260981c166080820152f35b600080fd5b3461019c576101af36612317565b906101b86129bd565b60009160005b82811061056f57506101d08493612588565b6000805b8481106102fc5750507fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f972600080a16000809360005b81811061024757610240868660007f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d8180a2613ba7565b6001600255005b6102a261025582848a612796565b73ffffffffffffffffffffffffffffffffffffffff6102766020830161282a565b167f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d600080a2806127d6565b906000915b8083106102b957505050600101610209565b909194976102f36102ed6001926102e78c8b6102e0826102da8e8b8d61269d565b9261265a565b5191613597565b90612409565b99612416565b950191906102a7565b6020610309828789612796565b61031f61031682806127d6565b9390920161282a565b9160009273ffffffffffffffffffffffffffffffffffffffff8091165b8285106103505750505050506001016101d4565b909192939561037f83610378610366848c61265a565b516103728b898b61269d565b856129f6565b9290613dd7565b9116840361050a576104a5576103958491613dd7565b9116610440576103b5576103aa600191612416565b96019392919061033c565b60a487604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152602160448201527f41413332207061796d61737465722065787069726564206f72206e6f7420647560648201527f65000000000000000000000000000000000000000000000000000000000000006084820152fd5b608488604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601460448201527f41413334207369676e6174757265206572726f720000000000000000000000006064820152fd5b608488604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601760448201527f414132322065787069726564206f72206e6f74206475650000000000000000006064820152fd5b608489604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601460448201527f41413234207369676e6174757265206572726f720000000000000000000000006064820152fd5b61057a818487612796565b9361058585806127d6565b919095602073ffffffffffffffffffffffffffffffffffffffff6105aa82840161282a565b1697600192838a1461076657896105da575b5050505060019293949550906105d191612409565b939291016101be565b8060406105e892019061284b565b918a3b1561019c57929391906040519485937f2dd8113300000000000000000000000000000000000000000000000000000000855288604486016040600488015252606490818601918a60051b8701019680936000915b8c83106106e657505050505050838392610684927ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8560009803016024860152612709565b03818a5afa90816106d7575b506106c657602486604051907f86a9f7500000000000000000000000000000000000000000000000000000000082526004820152fd5b93945084936105d1600189806105bc565b6106e0906121bd565b88610690565b91939596977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c908a9294969a0301865288357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee18336030181121561019c57836107538793858394016128ec565b9a0196019301909189979695949261063f565b606483604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601760248201527f4141393620696e76616c69642061676772656761746f720000000000000000006044820152fd5b3461019c576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c576107fc61229f565b33600052600082526001604060002001908154916dffffffffffffffffffffffffffff8360081c16928315610a0a5765ffffffffffff8160981c1680156109ac57421061094e5760009373ffffffffffffffffffffffffffffffffffffffff859485947fffffffffffffff000000000000000000000000000000000000000000000000ff86951690556040517fb7c918e0e249f999e965cafeb6c664271b3f4317d296461500e71da39f0cbda33391806108da8786836020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b0390a2165af16108e8612450565b50156108f057005b606490604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601860248201527f6661696c656420746f207769746864726177207374616b6500000000000000006044820152fd5b606485604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601b60248201527f5374616b65207769746864726177616c206973206e6f742064756500000000006044820152fd5b606486604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601d60248201527f6d7573742063616c6c20756e6c6f636b5374616b6528292066697273740000006044820152fd5b606485604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601460248201527f4e6f207374616b6520746f2077697468647261770000000000000000000000006044820152fd5b3461019c5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c573360005260006020526001604060002001805463ffffffff8160781c16908115610bdc5760ff1615610b7e5765ffffffffffff908142160191818311610b4f5780547fffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff001678ffffffffffff00000000000000000000000000000000000000609885901b161790556040519116815233907ffa9b3c14cc825c412c9ed81b3ba365a5b459439403f18829e572ed53a4180f0a90602090a2005b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f616c726561647920756e7374616b696e670000000000000000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6e6f74207374616b6564000000000000000000000000000000000000000000006044820152fd5b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c57610022610c6f61229f565b612748565b3461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5760043567ffffffffffffffff811161019c576020610cc8610d1b9236906004016122c2565b919073ffffffffffffffffffffffffffffffffffffffff9260405194859283927f570e1a360000000000000000000000000000000000000000000000000000000084528560048501526024840191612709565b03816000857f000000000000000000000000efc2c1444ebcc4db75e7613d20c6a62ff67a167c165af1908115610db757602492600092610d86575b50604051917f6ca7b806000000000000000000000000000000000000000000000000000000008352166004820152fd5b610da991925060203d602011610db0575b610da181836121ed565b8101906126dd565b9083610d56565b503d610d97565b6040513d6000823e3d90fd5b3461019c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c57610dfa61229f565b60243567ffffffffffffffff811161019c57600091610e1e839236906004016122c2565b90816040519283928337810184815203915af4610e39612450565b90610e7e6040519283927f99410554000000000000000000000000000000000000000000000000000000008452151560048401526040602484015260448301906123c6565b0390fd5b3461019c57610e9036612317565b610e9b9291926129bd565b610ea483612588565b60005b848110610f1c57506000927fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f972600080a16000915b858310610eec576102408585613ba7565b909193600190610f12610f0087898761269d565b610f0a888661265a565b519088613597565b0194019190610edb565b610f47610f40610f2e8385979561265a565b51610f3a84898761269d565b846129f6565b9190613dd7565b73ffffffffffffffffffffffffffffffffffffffff929183166110db5761107657610f7190613dd7565b911661101157610f8657600101929092610ea7565b60a490604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152602160448201527f41413332207061796d61737465722065787069726564206f72206e6f7420647560648201527f65000000000000000000000000000000000000000000000000000000000000006084820152fd5b608482604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601460448201527f41413334207369676e6174757265206572726f720000000000000000000000006064820152fd5b608483604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601760448201527f414132322065787069726564206f72206e6f74206475650000000000000000006064820152fd5b608484604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601460448201527f41413234207369676e6174757265206572726f720000000000000000000000006064820152fd5b3461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5773ffffffffffffffffffffffffffffffffffffffff61118c61229f565b1660005260006020526020604060002054604051908152f35b3461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5773ffffffffffffffffffffffffffffffffffffffff6111f161229f565b6000608060405161120181612155565b828152826020820152826040820152826060820152015216600052600060205260a06040600020608060405161123681612155565b6001835493848352015490602081019060ff8316151582526dffffffffffffffffffffffffffff60408201818560081c16815263ffffffff936060840193858760781c16855265ffffffffffff978891019660981c1686526040519788525115156020880152511660408601525116606084015251166080820152f35b3461019c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5760206112ec61229f565b73ffffffffffffffffffffffffffffffffffffffff6113096122f0565b911660005260018252604060002077ffffffffffffffffffffffffffffffffffffffffffffffff821660005282526040600020547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000006040519260401b16178152f35b3461019c577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60208136011261019c576004359067ffffffffffffffff821161019c5761012090823603011261019c576113c9602091600401612480565b604051908152f35b3461019c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5761140861229f565b60243590336000526000602052604060002090815491828411611508576000808573ffffffffffffffffffffffffffffffffffffffff8295839561144c848a612443565b90556040805173ffffffffffffffffffffffffffffffffffffffff831681526020810185905233917fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb91a2165af16114a2612450565b50156114aa57005b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6661696c656420746f20776974686472617700000000000000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f576974686472617720616d6f756e7420746f6f206c61726765000000000000006044820152fd5b3461019c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5761159d61229f565b73ffffffffffffffffffffffffffffffffffffffff6115ba6122f0565b9116600052600160205277ffffffffffffffffffffffffffffffffffffffffffffffff604060002091166000526020526020604060002054604051908152f35b3461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5760043577ffffffffffffffffffffffffffffffffffffffffffffffff811680910361019c5733600052600160205260406000209060005260205260406000206116728154612416565b9055005b6020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5760043563ffffffff9182821680920361019c5733600052600081526040600020928215611950576001840154908160781c1683106118f2576116f86dffffffffffffffffffffffffffff9182349160081c16612409565b93841561189457818511611836579065ffffffffffff61180592546040519061172082612155565b8152848101926001845260408201908816815260608201878152600160808401936000855233600052600089526040600020905181550194511515917fffffffffffffffffffffffffff0000000000000000000000000000000000000060ff72ffffffff0000000000000000000000000000006effffffffffffffffffffffffffff008954945160081b16945160781b1694169116171717835551167fffffffffffffff000000000000ffffffffffffffffffffffffffffffffffffff78ffffffffffff0000000000000000000000000000000000000083549260981b169116179055565b6040519283528201527fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c0160403392a2005b606483604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152600e60248201527f7374616b65206f766572666c6f770000000000000000000000000000000000006044820152fd5b606483604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601260248201527f6e6f207374616b652073706563696669656400000000000000000000000000006044820152fd5b606482604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601c60248201527f63616e6e6f7420646563726561736520756e7374616b652074696d65000000006044820152fd5b606482604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601a60248201527f6d757374207370656369667920756e7374616b652064656c61790000000000006044820152fd5b3461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c576004357fffffffff00000000000000000000000000000000000000000000000000000000811680910361019c57807f60fc6b6e0000000000000000000000000000000000000000000000000000000060209214908115611ad6575b8115611aac575b8115611a82575b8115611a58575b506040519015158152f35b7f01ffc9a70000000000000000000000000000000000000000000000000000000091501482611a4d565b7f3e84f0210000000000000000000000000000000000000000000000000000000081149150611a46565b7fcf28ef970000000000000000000000000000000000000000000000000000000081149150611a3f565b7f915074d80000000000000000000000000000000000000000000000000000000081149150611a38565b3461019c576102007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5767ffffffffffffffff60043581811161019c573660238201121561019c57611b62903690602481600401359101612268565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36016101c0811261019c5761014060405191611b9e83612155565b1261019c5760405192611bb0846121a0565b60243573ffffffffffffffffffffffffffffffffffffffff8116810361019c578452602093604435858201526064356040820152608435606082015260a435608082015260c43560a082015260e43560c08201526101043573ffffffffffffffffffffffffffffffffffffffff8116810361019c5760e08201526101243561010082015261014435610120820152825261016435848301526101843560408301526101a43560608301526101c43560808301526101e43590811161019c57611c7c9036906004016122c2565b905a3033036120f7578351606081015195603f5a0260061c61271060a0840151890101116120ce5760009681519182611ff0575b5050505090611cca915a9003608085015101923691612268565b925a90600094845193611cdc85613ccc565b9173ffffffffffffffffffffffffffffffffffffffff60e0870151168015600014611ea957505073ffffffffffffffffffffffffffffffffffffffff855116935b5a9003019360a06060820151910151016080860151850390818111611e95575b50508302604085015192818410600014611dce5750506003811015611da157600203611d79576113c99293508093611d7481613d65565b613cf6565b5050507fdeadaa51000000000000000000000000000000000000000000000000000000008152fd5b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526021600452fd5b81611dde92979396940390613c98565b506003841015611e6857507f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f60808683015192519473ffffffffffffffffffffffffffffffffffffffff865116948873ffffffffffffffffffffffffffffffffffffffff60e0890151169701519160405192835215898301528760408301526060820152a46113c9565b807f4e487b7100000000000000000000000000000000000000000000000000000000602492526021600452fd5b6064919003600a0204909301928780611d3d565b8095918051611eba575b5050611d1d565b6003861015611fc1576002860315611eb35760a088015190823b1561019c57600091611f2491836040519586809581947f7c627b210000000000000000000000000000000000000000000000000000000083528d60048401526080602484015260848301906123c6565b8b8b0260448301528b60648301520393f19081611fad575b50611fa65787893d610800808211611f9e575b506040519282828501016040528184528284013e610e7e6040519283927fad7954bc000000000000000000000000000000000000000000000000000000008452600484015260248301906123c6565b905083611f4f565b8980611eb3565b611fb89199506121bd565b6000978a611f3c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91600092918380938c73ffffffffffffffffffffffffffffffffffffffff885116910192f115612023575b808080611cb0565b611cca929195503d6108008082116120c6575b5060405190888183010160405280825260008983013e805161205f575b5050600194909161201b565b7f1c4fada7374c0a9ee8841fc38afe82932dc0f8e69012e927f061a8bae611a20188870151918973ffffffffffffffffffffffffffffffffffffffff8551169401516120bc604051928392835260408d84015260408301906123c6565b0390a38680612053565b905088612036565b877fdeaddead000000000000000000000000000000000000000000000000000000006000526000fd5b606486604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601760248201527f4141393220696e7465726e616c2063616c6c206f6e6c790000000000000000006044820152fd5b60a0810190811067ffffffffffffffff82111761217157604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610140810190811067ffffffffffffffff82111761217157604052565b67ffffffffffffffff811161217157604052565b6060810190811067ffffffffffffffff82111761217157604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761217157604052565b67ffffffffffffffff811161217157601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926122748261222e565b9161228260405193846121ed565b82948184528183011161019c578281602093846000960137010152565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361019c57565b9181601f8401121561019c5782359167ffffffffffffffff831161019c576020838186019501011161019c57565b6024359077ffffffffffffffffffffffffffffffffffffffffffffffff8216820361019c57565b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83011261019c5760043567ffffffffffffffff9283821161019c578060238301121561019c57816004013593841161019c5760248460051b8301011161019c57602401919060243573ffffffffffffffffffffffffffffffffffffffff8116810361019c5790565b60005b8381106123b65750506000910152565b81810151838201526020016123a6565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093612402815180928187528780880191016123a3565b0116010190565b91908201809211610b4f57565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610b4f5760010190565b91908203918211610b4f57565b3d1561247b573d906124618261222e565b9161246f60405193846121ed565b82523d6000602084013e565b606090565b604061248e8183018361284b565b90818351918237206124a3606084018461284b565b90818451918237209260c06124bb60e083018361284b565b908186519182372091845195602087019473ffffffffffffffffffffffffffffffffffffffff833516865260208301358789015260608801526080870152608081013560a087015260a081013582870152013560e08501526101009081850152835261012083019167ffffffffffffffff918484108385111761217157838252845190206101408501908152306101608601524661018086015260608452936101a00191821183831017612171575251902090565b67ffffffffffffffff81116121715760051b60200190565b9061259282612570565b6040906125a260405191826121ed565b8381527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06125d08295612570565b019160005b8381106125e25750505050565b60209082516125f081612155565b83516125fb816121a0565b600081526000849181838201528187820152816060818184015260809282848201528260a08201528260c08201528260e082015282610100820152826101208201528652818587015281898701528501528301528286010152016125d5565b805182101561266e5760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b919081101561266e5760051b810135907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee18136030182121561019c570190565b9081602091031261019c575173ffffffffffffffffffffffffffffffffffffffff8116810361019c5790565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b7f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4602073ffffffffffffffffffffffffffffffffffffffff61278a3485613c98565b936040519485521692a2565b919081101561266e5760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa18136030182121561019c570190565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561019c570180359067ffffffffffffffff821161019c57602001918160051b3603831361019c57565b3573ffffffffffffffffffffffffffffffffffffffff8116810361019c5790565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561019c570180359067ffffffffffffffff821161019c5760200191813603831361019c57565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561019c57016020813591019167ffffffffffffffff821161019c57813603831361019c57565b61012091813573ffffffffffffffffffffffffffffffffffffffff811680910361019c576129626129476129ba9561299b93855260208601356020860152612937604087018761289c565b9091806040880152860191612709565b612954606086018661289c565b908583036060870152612709565b6080840135608084015260a084013560a084015260c084013560c084015261298d60e085018561289c565b9084830360e0860152612709565b916129ac610100918281019061289c565b929091818503910152612709565b90565b60028054146129cc5760028055565b60046040517f3ee5aeb5000000000000000000000000000000000000000000000000000000008152fd5b926000905a93805194843573ffffffffffffffffffffffffffffffffffffffff811680910361019c5786526020850135602087015260808501356fffffffffffffffffffffffffffffffff90818116606089015260801c604088015260a086013560c088015260c086013590811661010088015260801c610120870152612a8060e086018661284b565b801561357b576034811061351d578060141161019c578060241161019c5760341161019c57602481013560801c60a0880152601481013560801c60808801523560601c60e08701525b612ad285612480565b60208301526040860151946effffffffffffffffffffffffffffff8660c08901511760608901511760808901511760a0890151176101008901511761012089015117116134bf57604087015160608801510160808801510160a08801510160c0880151016101008801510296835173ffffffffffffffffffffffffffffffffffffffff81511690612b66604085018561284b565b806131e4575b505060e0015173ffffffffffffffffffffffffffffffffffffffff1690600082156131ac575b6020612bd7918b828a01516000868a604051978896879586937f19822f7c00000000000000000000000000000000000000000000000000000000855260048501613db5565b0393f160009181613178575b50612c8b573d8c610800808311612c83575b50604051916020818401016040528083526000602084013e610e7e6040519283927f65c8fd4d000000000000000000000000000000000000000000000000000000008452600484015260606024840152600d60648401527f4141323320726576657274656400000000000000000000000000000000000000608484015260a0604484015260a48301906123c6565b915082612bf5565b9a92939495969798999a91156130f2575b509773ffffffffffffffffffffffffffffffffffffffff835116602084015190600052600160205260406000208160401c60005260205267ffffffffffffffff604060002091825492612cee84612416565b9055160361308d575a8503116130285773ffffffffffffffffffffffffffffffffffffffff60e0606093015116612d42575b509060a09184959697986040608096015260608601520135905a900301910152565b969550505a9683519773ffffffffffffffffffffffffffffffffffffffff60e08a01511680600052600060205260406000208054848110612fc3576080612dcd9a9b9c600093878094039055015192602089015183604051809d819582947f52b7512c0000000000000000000000000000000000000000000000000000000084528c60048501613db5565b039286f1978860009160009a612f36575b50612e86573d8b610800808311612e7e575b50604051916020818401016040528083526000602084013e610e7e6040519283927f65c8fd4d000000000000000000000000000000000000000000000000000000008452600484015260606024840152600d60648401527f4141333320726576657274656400000000000000000000000000000000000000608484015260a0604484015260a48301906123c6565b915082612df0565b9991929394959697989998925a900311612eab57509096959094939291906080612d20565b60a490604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152602760448201527f41413336206f766572207061796d6173746572566572696669636174696f6e4760648201527f61734c696d6974000000000000000000000000000000000000000000000000006084820152fd5b915098503d90816000823e612f4b82826121ed565b604081838101031261019c5780519067ffffffffffffffff821161019c57828101601f83830101121561019c578181015191612f868361222e565b93612f9460405195866121ed565b838552820160208483850101011161019c57602092612fba9184808701918501016123a3565b01519838612dde565b60848b604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601e60448201527f41413331207061796d6173746572206465706f73697420746f6f206c6f7700006064820152fd5b608490604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601e60448201527f41413236206f76657220766572696669636174696f6e4761734c696d697400006064820152fd5b608482604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601a60448201527f4141323520696e76616c6964206163636f756e74206e6f6e63650000000000006064820152fd5b600052600060205260406000208054808c11613113578b9003905538612c9c565b608484604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601760448201527f41413231206469646e2774207061792070726566756e640000000000000000006064820152fd5b9091506020813d6020116131a4575b81613194602093836121ed565b8101031261019c57519038612be3565b3d9150613187565b508060005260006020526040600020548a81116000146131d75750612bd7602060005b915050612b92565b6020612bd7918c036131cf565b833b61345a57604088510151602060405180927f570e1a360000000000000000000000000000000000000000000000000000000082528260048301528160008161323260248201898b612709565b039273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000efc2c1444ebcc4db75e7613d20c6a62ff67a167c1690f1908115610db75760009161343b575b5073ffffffffffffffffffffffffffffffffffffffff811680156133d6578503613371573b1561330c5760141161019c5773ffffffffffffffffffffffffffffffffffffffff9183887fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d604060e0958787602086015195510151168251913560601c82526020820152a391612b6c565b60848d604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152602060448201527f4141313520696e6974436f6465206d757374206372656174652073656e6465726064820152fd5b60848e604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152602060448201527f4141313420696e6974436f6465206d7573742072657475726e2073656e6465726064820152fd5b60848f604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601b60448201527f4141313320696e6974436f6465206661696c6564206f72204f4f4700000000006064820152fd5b613454915060203d602011610db057610da181836121ed565b3861327c565b60848d604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601f60448201527f414131302073656e64657220616c726561647920636f6e7374727563746564006064820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f41413934206761732076616c756573206f766572666c6f7700000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4141393320696e76616c6964207061796d6173746572416e64446174610000006044820152fd5b5050600060e087015260006080870152600060a0870152612ac9565b9092915a906060810151916040928351967fffffffff00000000000000000000000000000000000000000000000000000000886135d7606084018461284b565b600060038211613b9f575b7f8dd7712f0000000000000000000000000000000000000000000000000000000094168403613a445750505061379d6000926136b292602088015161363a8a5193849360208501528b602485015260648401906128ec565b90604483015203906136727fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0928381018352826121ed565b61379189519485927e42dc5300000000000000000000000000000000000000000000000000000000602085015261020060248501526102248401906123c6565b613760604484018b60806101a091805173ffffffffffffffffffffffffffffffffffffffff808251168652602082015160208701526040820151604087015260608201516060870152838201518487015260a082015160a087015260c082015160c087015260e08201511660e0860152610100808201519086015261012080910151908501526020810151610140850152604081015161016085015260608101516101808501520151910152565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc83820301610204840152876123c6565b039081018352826121ed565b6020918183809351910182305af1600051988652156137bf575b505050505050565b909192939495965060003d8214613a3a575b7fdeaddead00000000000000000000000000000000000000000000000000000000810361385b57608487878051917f220266b600000000000000000000000000000000000000000000000000000000835260048301526024820152600f60448201527f41413935206f7574206f662067617300000000000000000000000000000000006064820152fd5b7fdeadaa510000000000000000000000000000000000000000000000000000000091929395949650146000146138c55750506138a961389e6138b8935a90612443565b608085015190612409565b9083015183611d748295613d65565b905b3880808080806137b7565b909261395290828601518651907ff62676f440ff169a3a9afdbf812e89e7f95975ee8e5c31214ffdef631c5f479273ffffffffffffffffffffffffffffffffffffffff9580878551169401516139483d610800808211613a32575b508a519084818301018c5280825260008583013e8a805194859485528401528a8301906123c6565b0390a35a90612443565b916139636080860193845190612409565b926000905a94829488519761397789613ccc565b948260e08b0151168015600014613a1857505050875116955b5a9003019560a06060820151910151019051860390818111613a04575b5050840290850151928184106000146139de57505080611e68575090816139d89293611d7481613d65565b906138ba565b6139ee9082849397950390613c98565b50611e68575090826139ff92613cf6565b6139d8565b6064919003600a02049094019338806139ad565b90919892509751613a2a575b50613990565b955038613a24565b905038613920565b8181803e516137d1565b613b97945082935090613a8c917e42dc53000000000000000000000000000000000000000000000000000000006020613b6b9501526102006024860152610224850191612709565b613b3a604484018860806101a091805173ffffffffffffffffffffffffffffffffffffffff808251168652602082015160208701526040820151604087015260608201516060870152838201518487015260a082015160a087015260c082015160c087015260e08201511660e0860152610100808201519086015261012080910151908501526020810151610140850152604081015161016085015260608101516101808501520151910152565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc83820301610204840152846123c6565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018952886121ed565b60008761379d565b5081356135e2565b73ffffffffffffffffffffffffffffffffffffffff168015613c3a57600080809381935af1613bd4612450565b5015613bdc57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f41413931206661696c65642073656e6420746f2062656e6566696369617279006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4141393020696e76616c69642062656e656669636961727900000000000000006044820152fd5b73ffffffffffffffffffffffffffffffffffffffff166000526000602052613cc66040600020918254612409565b80915590565b610120610100820151910151808214613cf257480180821015613ced575090565b905090565b5090565b9190917f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f6080602083015192519473ffffffffffffffffffffffffffffffffffffffff946020868851169660e089015116970151916040519283526000602084015260408301526060820152a4565b60208101519051907f67b4fa9642f42120bf031f3051d1824b0fe25627945b27b8a6a65d5761d5482e60208073ffffffffffffffffffffffffffffffffffffffff855116940151604051908152a3565b613dcd604092959493956060835260608301906128ec565b9460208201520152565b8015613e6457600060408051613dec816121d1565b828152826020820152015273ffffffffffffffffffffffffffffffffffffffff811690604065ffffffffffff91828160a01c16908115613e5c575b60d01c92825191613e37836121d1565b8583528460208401521691829101524211908115613e5457509091565b905042109091565b839150613e27565b5060009060009056fea2646970667358221220b094fd69f04977ae9458e5ba422d01cd2d20dbcfca0992ff37f19aa07deec25464736f6c6343000817003360806040526004361061001e5760003560e01c80638d80ff0a14610023575b600080fd5b6100dc6004803603602081101561003957600080fd5b810190808035906020019064010000000081111561005657600080fd5b82018360208201111561006857600080fd5b8035906020019184600183028401116401000000008311171561008a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506100de565b005b805160205b8181101561015f578083015160f81c6001820184015160601c60158301850151603584018601516055850187016000856000811461012857600181146101385761013d565b6000808585888a5af1915061013d565b600080fd5b50600081141561014c57600080fd5b82605501870196505050505050506100e3565b50505056fea264697066735822122035246402746c96964495cae5b36461fd44dfb89f8e6cf6f6b8d60c0aa89f414864736f6c634300070600336080604052600436101561001257600080fd5b6000803560e01c63570e1a361461002857600080fd5b346100c95760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100c95760043567ffffffffffffffff918282116100c957366023830112156100c95781600401359283116100c95736602484840101116100c9576100c561009e84602485016100fc565b60405173ffffffffffffffffffffffffffffffffffffffff90911681529081906020820190565b0390f35b80fd5b507f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90806014116101bb5767ffffffffffffffff917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec82018381116101cd575b604051937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f81600b8701160116850190858210908211176101c0575b604052808452602084019036848401116101bb576020946000600c819682946014880187378301015251923560601c5af19060005191156101b557565b60009150565b600080fd5b6101c86100cc565b610178565b6101d56100cc565b61013a56fea26469706673582212201927e80b76ab9b71c952137dd676621a9fdf520c25928815636594036eb1c40364736f6c634300081100336080604052600436106100435760003560e01c8063076c37b21461004f578063481286e61461007157806356299481146100ba57806366cfa057146100da57600080fd5b3661004a57005b600080fd5b34801561005b57600080fd5b5061006f61006a366004610327565b6100fa565b005b34801561007d57600080fd5b5061009161008c366004610327565b61014a565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100c657600080fd5b506100916100d5366004610349565b61015d565b3480156100e657600080fd5b5061006f6100f53660046103ca565b610172565b61014582826040518060200161010f9061031a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082820381018352601f90910116604052610183565b505050565b600061015683836102e7565b9392505050565b600061016a8484846102f0565b949350505050565b61017d838383610183565b50505050565b6000834710156101f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e636500000060448201526064015b60405180910390fd5b815160000361025f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f60448201526064016101eb565b8282516020840186f5905073ffffffffffffffffffffffffffffffffffffffff8116610156576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f790000000000000060448201526064016101eb565b60006101568383305b6000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b61014e806104ad83390190565b6000806040838503121561033a57600080fd5b50508035926020909101359150565b60008060006060848603121561035e57600080fd5b8335925060208401359150604084013573ffffffffffffffffffffffffffffffffffffffff8116811461039057600080fd5b809150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806000606084860312156103df57600080fd5b8335925060208401359150604084013567ffffffffffffffff8082111561040557600080fd5b818601915086601f83011261041957600080fd5b81358181111561042b5761042b61039b565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156104715761047161039b565b8160405282815289602084870101111561048a57600080fd5b826020860160208301376000602084830101528095505050505050925092509256fe608060405234801561001057600080fd5b5061012e806100206000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063249cb3fa14602d575b600080fd5b603c603836600460b1565b604e565b60405190815260200160405180910390f35b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16608857600060aa565b7fa2ef4600d742022d532d4747cb3547474667d6f13804902513b2ec01c848f4b45b9392505050565b6000806040838503121560c357600080fd5b82359150602083013573ffffffffffffffffffffffffffffffffffffffff8116811460ed57600080fd5b80915050925092905056fea26469706673582212205ffd4e6cede7d06a5daf93d48d0541fc68189eeb16608c1999a82063b666eb1164736f6c63430008130033a2646970667358221220fdc4a0fe96e3b21c108ca155438d37c9143fb01278a3c1d274948bad89c564ba64736f6c63430008130033885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d6080604052600436106101dc5760003560e01c8063affed0e011610102578063e19a9dd911610095578063f08a032311610064578063f08a032314611647578063f698da2514611698578063f8dc5dd9146116c3578063ffa1ad741461173e57610231565b8063e19a9dd91461139b578063e318b52b146113ec578063e75235b81461147d578063e86637db146114a857610231565b8063cc2f8452116100d1578063cc2f8452146110e8578063d4d9bdcd146111b5578063d8d11f78146111f0578063e009cfde1461132a57610231565b8063affed0e014610d94578063b4faba0914610dbf578063b63e800d14610ea7578063c4ca3a9c1461101757610231565b80635624b25b1161017a5780636a761202116101495780636a761202146109945780637d83297414610b50578063934f3a1114610bbf578063a0e67e2b14610d2857610231565b80635624b25b146107fb5780635ae6bd37146108b9578063610b592514610908578063694e80c31461095957610231565b80632f54bf6e116101b65780632f54bf6e146104d35780633408e4701461053a578063468721a7146105655780635229073f1461067a57610231565b80630d582f131461029e57806312fb68e0146102f95780632d9ad53d1461046c57610231565b36610231573373ffffffffffffffffffffffffffffffffffffffff167f3d0ce9bfc3ed7d6862dbb28b2dea94561fe714a1b4d019aa8af39730d1ad7c3d346040518082815260200191505060405180910390a2005b34801561023d57600080fd5b5060007f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d560001b905080548061027257600080f35b36600080373360601b365260008060143601600080855af13d6000803e80610299573d6000fd5b3d6000f35b3480156102aa57600080fd5b506102f7600480360360408110156102c157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506117ce565b005b34801561030557600080fd5b5061046a6004803603608081101561031c57600080fd5b81019080803590602001909291908035906020019064010000000081111561034357600080fd5b82018360208201111561035557600080fd5b8035906020019184600183028401116401000000008311171561037757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156103da57600080fd5b8201836020820111156103ec57600080fd5b8035906020019184600183028401116401000000008311171561040e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050611bbe565b005b34801561047857600080fd5b506104bb6004803603602081101561048f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612440565b60405180821515815260200191505060405180910390f35b3480156104df57600080fd5b50610522600480360360208110156104f657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612512565b60405180821515815260200191505060405180910390f35b34801561054657600080fd5b5061054f6125e4565b6040518082815260200191505060405180910390f35b34801561057157600080fd5b506106626004803603608081101561058857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156105cf57600080fd5b8201836020820111156105e157600080fd5b8035906020019184600183028401116401000000008311171561060357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803560ff1690602001909291905050506125f1565b60405180821515815260200191505060405180910390f35b34801561068657600080fd5b506107776004803603608081101561069d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156106e457600080fd5b8201836020820111156106f657600080fd5b8035906020019184600183028401116401000000008311171561071857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803560ff1690602001909291905050506127d7565b60405180831515815260200180602001828103825283818151815260200191508051906020019080838360005b838110156107bf5780820151818401526020810190506107a4565b50505050905090810190601f1680156107ec5780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b34801561080757600080fd5b5061083e6004803603604081101561081e57600080fd5b81019080803590602001909291908035906020019092919050505061280d565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561087e578082015181840152602081019050610863565b50505050905090810190601f1680156108ab5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156108c557600080fd5b506108f2600480360360208110156108dc57600080fd5b8101908080359060200190929190505050612894565b6040518082815260200191505060405180910390f35b34801561091457600080fd5b506109576004803603602081101561092b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506128ac565b005b34801561096557600080fd5b506109926004803603602081101561097c57600080fd5b8101908080359060200190929190505050612c3e565b005b610b3860048036036101408110156109ab57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156109f257600080fd5b820183602082011115610a0457600080fd5b80359060200191846001830284011164010000000083111715610a2657600080fd5b9091929391929390803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610ab257600080fd5b820183602082011115610ac457600080fd5b80359060200191846001830284011164010000000083111715610ae657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612d78565b60405180821515815260200191505060405180910390f35b348015610b5c57600080fd5b50610ba960048036036040811015610b7357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506132b5565b6040518082815260200191505060405180910390f35b348015610bcb57600080fd5b50610d2660048036036060811015610be257600080fd5b810190808035906020019092919080359060200190640100000000811115610c0957600080fd5b820183602082011115610c1b57600080fd5b80359060200191846001830284011164010000000083111715610c3d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610ca057600080fd5b820183602082011115610cb257600080fd5b80359060200191846001830284011164010000000083111715610cd457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506132da565b005b348015610d3457600080fd5b50610d3d613369565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b83811015610d80578082015181840152602081019050610d65565b505050509050019250505060405180910390f35b348015610da057600080fd5b50610da9613512565b6040518082815260200191505060405180910390f35b348015610dcb57600080fd5b50610ea560048036036040811015610de257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610e1f57600080fd5b820183602082011115610e3157600080fd5b80359060200191846001830284011164010000000083111715610e5357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050613518565b005b348015610eb357600080fd5b506110156004803603610100811015610ecb57600080fd5b8101908080359060200190640100000000811115610ee857600080fd5b820183602082011115610efa57600080fd5b80359060200191846020830284011164010000000083111715610f1c57600080fd5b909192939192939080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190640100000000811115610f6757600080fd5b820183602082011115610f7957600080fd5b80359060200191846001830284011164010000000083111715610f9b57600080fd5b9091929391929390803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061353a565b005b34801561102357600080fd5b506110d26004803603608081101561103a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561108157600080fd5b82018360208201111561109357600080fd5b803590602001918460018302840111640100000000831117156110b557600080fd5b9091929391929390803560ff1690602001909291905050506136f8565b6040518082815260200191505060405180910390f35b3480156110f457600080fd5b506111416004803603604081101561110b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613820565b60405180806020018373ffffffffffffffffffffffffffffffffffffffff168152602001828103825284818151815260200191508051906020019060200280838360005b838110156111a0578082015181840152602081019050611185565b50505050905001935050505060405180910390f35b3480156111c157600080fd5b506111ee600480360360208110156111d857600080fd5b8101908080359060200190929190505050613a12565b005b3480156111fc57600080fd5b50611314600480360361014081101561121457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561125b57600080fd5b82018360208201111561126d57600080fd5b8035906020019184600183028401116401000000008311171561128f57600080fd5b9091929391929390803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613bb1565b6040518082815260200191505060405180910390f35b34801561133657600080fd5b506113996004803603604081101561134d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613bde565b005b3480156113a757600080fd5b506113ea600480360360208110156113be57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613f6f565b005b3480156113f857600080fd5b5061147b6004803603606081101561140f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613ff3565b005b34801561148957600080fd5b50611492614665565b6040518082815260200191505060405180910390f35b3480156114b457600080fd5b506115cc60048036036101408110156114cc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561151357600080fd5b82018360208201111561152557600080fd5b8035906020019184600183028401116401000000008311171561154757600080fd5b9091929391929390803560ff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061466f565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561160c5780820151818401526020810190506115f1565b50505050905090810190601f1680156116395780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561165357600080fd5b506116966004803603602081101561166a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050614817565b005b3480156116a457600080fd5b506116ad614878565b6040518082815260200191505060405180910390f35b3480156116cf57600080fd5b5061173c600480360360608110156116e657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506148f6565b005b34801561174a57600080fd5b50611753614d29565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015611793578082015181840152602081019050611778565b50505050905090810190601f1680156117c05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6117d6614d62565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156118405750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561187857503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b6118ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60026000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160026000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506003600081548092919060010191905055507f9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea2682604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a18060045414611bba57611bb981612c3e565b5b5050565b611bd2604182614e0590919063ffffffff16565b82511015611c48576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000808060008060005b8681101561243457611c648882614e3f565b80945081955082965050505060008460ff16141561206d578260001c9450611c96604188614e0590919063ffffffff16565b8260001c1015611d0e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8751611d2760208460001c614e6e90919063ffffffff16565b1115611d9b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60006020838a01015190508851611dd182611dc360208760001c614e6e90919063ffffffff16565b614e6e90919063ffffffff16565b1115611e45576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60606020848b010190506320c13b0b60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168773ffffffffffffffffffffffffffffffffffffffff166320c13b0b8d846040518363ffffffff1660e01b8152600401808060200180602001838103835285818151815260200191508051906020019080838360005b83811015611ee7578082015181840152602081019050611ecc565b50505050905090810190601f168015611f145780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015611f4d578082015181840152602081019050611f32565b50505050905090810190601f168015611f7a5780820380516001836020036101000a031916815260200191505b5094505050505060206040518083038186803b158015611f9957600080fd5b505afa158015611fad573d6000803e3d6000fd5b505050506040513d6020811015611fc357600080fd5b81019080805190602001909291905050507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612066576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b50506122b2565b60018460ff161415612181578260001c94508473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061210a57506000600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008c81526020019081526020016000205414155b61217c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323500000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6122b1565b601e8460ff1611156122495760018a60405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c018281526020019150506040516020818303038152906040528051906020012060048603858560405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612238573d6000803e3d6000fd5b5050506020604051035194506122b0565b60018a85858560405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156122a3573d6000803e3d6000fd5b5050506020604051035194505b5b5b8573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161180156123795750600073ffffffffffffffffffffffffffffffffffffffff16600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b80156123b25750600173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b612424576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330323600000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8495508080600101915050611c52565b50505050505050505050565b60008173ffffffffffffffffffffffffffffffffffffffff16600173ffffffffffffffffffffffffffffffffffffffff161415801561250b5750600073ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b6000600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156125dd5750600073ffffffffffffffffffffffffffffffffffffffff16600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b6000804690508091505090565b6000600173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156126bc5750600073ffffffffffffffffffffffffffffffffffffffff16600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b61272e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b61273b858585855a614e8d565b9050801561278b573373ffffffffffffffffffffffffffffffffffffffff167f6895c13664aa4f67288b25d7a21d7aaa34916e355fb9b6fae0a139a9085becb860405160405180910390a26127cf565b3373ffffffffffffffffffffffffffffffffffffffff167facd2c8702804128fdb0db2bb49f6d127dd0181c13fd45dbfe16de0930e2bd37560405160405180910390a25b949350505050565b600060606127e7868686866125f1565b915060405160203d0181016040523d81523d6000602083013e8091505094509492505050565b606060006020830267ffffffffffffffff8111801561282b57600080fd5b506040519080825280601f01601f19166020018201604052801561285e5781602001600182028036833780820191505090505b50905060005b8381101561288957808501548060208302602085010152508080600101915050612864565b508091505092915050565b60076020528060005260406000206000915090505481565b6128b4614d62565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415801561291e5750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b612990576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a91576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f844081604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b612c46614d62565b600354811115612cbe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001811015612d35576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b806004819055507f610f7ff2b304ae8903c3de74c60c6ab1f7d6226b3f52c5161905bb5ad4039c936004546040518082815260200191505060405180910390a150565b6000806000612d928e8e8e8e8e8e8e8e8e8e60055461466f565b905060056000815480929190600101919050555080805190602001209150612dbb8282866132da565b506000612dc6614ed9565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612fac578073ffffffffffffffffffffffffffffffffffffffff166375f0bb528f8f8f8f8f8f8f8f8f8f8f336040518d63ffffffff1660e01b8152600401808d73ffffffffffffffffffffffffffffffffffffffff1681526020018c8152602001806020018a6001811115612e6957fe5b81526020018981526020018881526020018781526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff168152602001806020018473ffffffffffffffffffffffffffffffffffffffff16815260200183810383528d8d82818152602001925080828437600081840152601f19601f820116905080830192505050838103825285818151815260200191508051906020019080838360005b83811015612f3b578082015181840152602081019050612f20565b50505050905090810190601f168015612f685780820380516001836020036101000a031916815260200191505b509e505050505050505050505050505050600060405180830381600087803b158015612f9357600080fd5b505af1158015612fa7573d6000803e3d6000fd5b505050505b6101f4612fd36109c48b01603f60408d0281612fc457fe5b04614f0a90919063ffffffff16565b015a1015613049576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60005a90506130b28f8f8f8f8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508e60008d146130a7578e6130ad565b6109c45a035b614e8d565b93506130c75a82614f2490919063ffffffff16565b905083806130d6575060008a14155b806130e2575060008814155b613154576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60008089111561316e5761316b828b8b8b8b614f44565b90505b84156131b8577f442e715f626346e8c54381002da614f62bee8d27386535b2521ec8540898556e8482604051808381526020018281526020019250505060405180910390a16131f8565b7f23428b18acfb3ea64b08dc0c1d296ea9c09702c09083ca5272e64d115b687d238482604051808381526020018281526020019250505060405180910390a15b5050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146132a4578073ffffffffffffffffffffffffffffffffffffffff16639327136883856040518363ffffffff1660e01b815260040180838152602001821515815260200192505050600060405180830381600087803b15801561328b57600080fd5b505af115801561329f573d6000803e3d6000fd5b505050505b50509b9a5050505050505050505050565b6008602052816000526040600020602052806000526040600020600091509150505481565b6000600454905060008111613357576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b61336384848484611bbe565b50505050565b6060600060035467ffffffffffffffff8111801561338657600080fd5b506040519080825280602002602001820160405280156133b55781602001602082028036833780820191505090505b50905060008060026000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614613509578083838151811061346057fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050818060010192505061341f565b82935050505090565b60055481565b600080825160208401855af4806000523d6020523d600060403e60403d016000fd5b6135858a8a80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508961514a565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146135c3576135c28461564a565b5b6136118787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050615679565b600082111561362b5761362982600060018685614f44565b505b3373ffffffffffffffffffffffffffffffffffffffff167f141df868a6331af528e38c83b7aa03edc19be66e37ae67f9285bf4f8e3c6a1a88b8b8b8b8960405180806020018581526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281038252878782818152602001925060200280828437600081840152601f19601f820116905080830192505050965050505050505060405180910390a250505050505050505050565b6000805a905061374f878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050865a614e8d565b61375857600080fd5b60005a8203905080604051602001808281526020019150506040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156137e55780820151818401526020810190506137ca565b50505050905090810190601f1680156138125780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b606060008267ffffffffffffffff8111801561383b57600080fd5b5060405190808252806020026020018201604052801561386a5781602001602082028036833780820191505090505b509150600080600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415801561393d5750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561394857508482105b15613a03578084838151811061395a57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081806001019250506138d3565b80925081845250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff16600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415613b14576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330333000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000838152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16817ff2a0eb156472d1440255b0d7c1e19cc07115d1051fe605b0dce69acfec884d9c60405160405180910390a350565b6000613bc68c8c8c8c8c8c8c8c8c8c8c61466f565b8051906020012090509b9a5050505050505050505050565b613be6614d62565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015613c505750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b613cc2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613dc2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507faab4fa2b463f581b2b32cb3b7e3b704b9ce37cc209b5fb4d77e593ace405427681604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b613f77614d62565b60007f4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c860001b90508181557f1151116914515bc0891ff9047a6cb32cf902546f83066499bcf8ba33d2353fa282604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a15050565b613ffb614d62565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156140655750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561409d57503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b61410f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614614210576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561427a5750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b6142ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146143ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303500000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507ff8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf82604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a17f9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea2681604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1505050565b6000600454905090565b606060007fbb8310d486368db6bd6f849402fdd73ad53d316b5a4b2644ad6efe0f941286d860001b8d8d8d8d60405180838380828437808301925050509250505060405180910390208c8c8c8c8c8c8c604051602001808c81526020018b73ffffffffffffffffffffffffffffffffffffffff1681526020018a815260200189815260200188600181111561470057fe5b81526020018781526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019b505050505050505050505050604051602081830303815290604052805190602001209050601960f81b600160f81b61478c614878565b8360405160200180857effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152600101847effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018381526020018281526020019450505050506040516020818303038152906040529150509b9a5050505050505050505050565b61481f614d62565b6148288161564a565b7f5ac6c46c93c8d0e53714ba3b53db3e7c046da994313d7ed0d192028bc7c228b081604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b60007f47e79534a245952e8b16893a336b85a3d9ea9fa8c573f3d803afb92a7946921860001b6148a66125e4565b30604051602001808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff168152602001935050505060405160208183030381529060405280519060200120905090565b6148fe614d62565b806001600354031015614979576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156149e35750600173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b614a55576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614614b55576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303500000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360008154809291906001900391905055507ff8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf82604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a18060045414614d2457614d2381612c3e565b5b505050565b6040518060400160405280600581526020017f312e332e3000000000000000000000000000000000000000000000000000000081525081565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614614e03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330333100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b565b600080831415614e185760009050614e39565b6000828402905082848281614e2957fe5b0414614e3457600080fd5b809150505b92915050565b60008060008360410260208101860151925060408101860151915060ff60418201870151169350509250925092565b600080828401905083811015614e8357600080fd5b8091505092915050565b6000600180811115614e9b57fe5b836001811115614ea757fe5b1415614ec0576000808551602087018986f49050614ed0565b600080855160208701888a87f190505b95945050505050565b6000807f4a204f620c8c5ccdca3fd54d003badd85ba500436a431f0cbda4f558c93c34c860001b9050805491505090565b600081831015614f1a5781614f1c565b825b905092915050565b600082821115614f3357600080fd5b600082840390508091505092915050565b600080600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614614f815782614f83565b325b9050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561509b57614fed3a8610614fca573a614fcc565b855b614fdf888a614e6e90919063ffffffff16565b614e0590919063ffffffff16565b91508073ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050615096576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b615140565b6150c0856150b2888a614e6e90919063ffffffff16565b614e0590919063ffffffff16565b91506150cd8482846158b4565b61513f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330313200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b5b5095945050505050565b6000600454146151c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8151811115615239576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303100000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60018110156152b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303200000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b60006001905060005b83518110156155b65760008482815181106152d057fe5b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156153445750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561537c57503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b80156153b457508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b615426576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303300000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614615527576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475332303400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508092505080806001019150506152b9565b506001600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550825160038190555081600481905550505050565b60007f6c9a6c4a39284e37ed1cf53d337577d14212a4870fb976a4366c693b939918d560001b90508181555050565b600073ffffffffffffffffffffffffffffffffffffffff1660016000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461577b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475331303000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001806000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146158b05761583d8260008360015a614e8d565b6158af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f475330303000000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b5b5050565b60008063a9059cbb8484604051602401808373ffffffffffffffffffffffffffffffffffffffff168152602001828152602001925050506040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050509050602060008251602084016000896127105a03f13d6000811461595b5760208114615963576000935061596e565b81935061596e565b600051158215171593505b505050939250505056fea26469706673582212203874bcf92e1722cc7bfa0cef1a0985cf0dc3485ba0663db3747ccdf1605df53464736f6c6343000706003360806040526004361061018a5760003560e01c806381503da1116100d6578063d323826a1161007f578063e96deee411610059578063e96deee414610395578063f5745aba146103a8578063f9664498146103bb57600080fd5b8063d323826a1461034f578063ddda0acb1461036f578063e437252a1461038257600080fd5b80639c36a286116100b05780639c36a28614610316578063a7db93f214610329578063c3fe107b1461033c57600080fd5b806381503da1146102d0578063890c283b146102e357806398e810771461030357600080fd5b80632f990e3f116101385780636cec2536116101125780636cec25361461027d57806374637a7a1461029d5780637f565360146102bd57600080fd5b80632f990e3f1461023757806331a7c8c81461024a57806342d654fc1461025d57600080fd5b806327fe18221161016957806327fe1822146101f15780632852527a1461020457806328ddd0461461021757600080fd5b8062d84acb1461018f57806326307668146101cb57806326a32fc7146101de575b600080fd5b6101a261019d366004612915565b6103ce565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b6101a26101d9366004612994565b6103e6565b6101a26101ec3660046129db565b610452565b6101a26101ff3660046129db565b6104de565b6101a2610212366004612a39565b610539565b34801561022357600080fd5b506101a2610232366004612a90565b6106fe565b6101a2610245366004612aa9565b61072a565b6101a2610258366004612aa9565b6107bb565b34801561026957600080fd5b506101a2610278366004612b1e565b6107c9565b34801561028957600080fd5b506101a2610298366004612a90565b610823565b3480156102a957600080fd5b506101a26102b8366004612b4a565b61084f565b6101a26102cb3660046129db565b611162565b6101a26102de366004612b74565b6111e8565b3480156102ef57600080fd5b506101a26102fe366004612bac565b611276565b6101a2610311366004612bce565b6112a3565b6101a2610324366004612994565b611505565b6101a2610337366004612c49565b6116f1565b6101a261034a366004612aa9565b611964565b34801561035b57600080fd5b506101a261036a366004612cd9565b6119ed565b6101a261037d366004612c49565b611a17565b6101a2610390366004612bce565b611e0c565b6101a26103a3366004612915565b611e95565b6101a26103b6366004612bce565b611ea4565b6101a26103c9366004612b74565b611f2d565b60006103dd8585858533611a17565b95945050505050565b6000806103f2846120db565b90508083516020850134f59150610408826123d3565b604051819073ffffffffffffffffffffffffffffffffffffffff8416907fb8fda7e00c6b06a2b54e58521bc5894fee35f1090e5a3bb6390bfe2b98b497f790600090a35092915050565b60006104d86104d260408051437fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101406020830152419282019290925260608101919091524260808201524460a08201524660c08201523360e08201526000906101000160405160208183030381529060405280519060200120905090565b836103e6565b92915050565b600081516020830134f090506104f3816123d3565b60405173ffffffffffffffffffffffffffffffffffffffff8216907f4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b51190600090a2919050565b600080610545856120db565b905060008460601b90506040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528160148201527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006028820152826037826000f593505073ffffffffffffffffffffffffffffffffffffffff8316610635576040517fc05cee7a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ba5ed099633d3b313e4d5f7bdc1305d3c28ba5ed1660048201526024015b60405180910390fd5b604051829073ffffffffffffffffffffffffffffffffffffffff8516907fb8fda7e00c6b06a2b54e58521bc5894fee35f1090e5a3bb6390bfe2b98b497f790600090a36000808473ffffffffffffffffffffffffffffffffffffffff1634876040516106a19190612d29565b60006040518083038185875af1925050503d80600081146106de576040519150601f19603f3d011682016040523d82523d6000602084013e6106e3565b606091505b50915091506106f382828961247d565b505050509392505050565b60006104d87f000000000000000000000000ba5ed099633d3b313e4d5f7bdc1305d3c28ba5ed8361084f565b60006107b36107aa60408051437fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101406020830152419282019290925260608101919091524260808201524460a08201524660c08201523360e08201526000906101000160405160208183030381529060405280519060200120905090565b85858533611a17565b949350505050565b60006107b3848484336112a3565b60006040518260005260ff600b53836020527f21c35dbe1b344a2488cf3321d6ce542f8e9f305544ff09e4993a62319a497c1f6040526055600b20601452806040525061d694600052600160345350506017601e20919050565b60006104d8827f000000000000000000000000ba5ed099633d3b313e4d5f7bdc1305d3c28ba5ed6107c9565b600060607f9400000000000000000000000000000000000000000000000000000000000000610887600167ffffffffffffffff612d45565b67ffffffffffffffff16841115610902576040517f3c55ab3b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ba5ed099633d3b313e4d5f7bdc1305d3c28ba5ed16600482015260240161062c565b836000036109c7576040517fd60000000000000000000000000000000000000000000000000000000000000060208201527fff00000000000000000000000000000000000000000000000000000000000000821660218201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b1660228201527f800000000000000000000000000000000000000000000000000000000000000060368201526037015b6040516020818303038152906040529150611152565b607f8411610a60576040517fd60000000000000000000000000000000000000000000000000000000000000060208201527fff0000000000000000000000000000000000000000000000000000000000000080831660218301527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606088901b16602283015260f886901b1660368201526037016109b1565b60ff8411610b1f576040517fd70000000000000000000000000000000000000000000000000000000000000060208201527fff0000000000000000000000000000000000000000000000000000000000000080831660218301527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606088901b1660228301527f8100000000000000000000000000000000000000000000000000000000000000603683015260f886901b1660378201526038016109b1565b61ffff8411610bff576040517fd80000000000000000000000000000000000000000000000000000000000000060208201527fff00000000000000000000000000000000000000000000000000000000000000821660218201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b1660228201527f820000000000000000000000000000000000000000000000000000000000000060368201527fffff00000000000000000000000000000000000000000000000000000000000060f086901b1660378201526039016109b1565b62ffffff8411610ce0576040517fd90000000000000000000000000000000000000000000000000000000000000060208201527fff00000000000000000000000000000000000000000000000000000000000000821660218201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b1660228201527f830000000000000000000000000000000000000000000000000000000000000060368201527fffffff000000000000000000000000000000000000000000000000000000000060e886901b166037820152603a016109b1565b63ffffffff8411610dc2576040517fda0000000000000000000000000000000000000000000000000000000000000060208201527fff00000000000000000000000000000000000000000000000000000000000000821660218201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b1660228201527f840000000000000000000000000000000000000000000000000000000000000060368201527fffffffff0000000000000000000000000000000000000000000000000000000060e086901b166037820152603b016109b1565b64ffffffffff8411610ea5576040517fdb0000000000000000000000000000000000000000000000000000000000000060208201527fff00000000000000000000000000000000000000000000000000000000000000821660218201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b1660228201527f850000000000000000000000000000000000000000000000000000000000000060368201527fffffffffff00000000000000000000000000000000000000000000000000000060d886901b166037820152603c016109b1565b65ffffffffffff8411610f89576040517fdc0000000000000000000000000000000000000000000000000000000000000060208201527fff00000000000000000000000000000000000000000000000000000000000000821660218201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b1660228201527f860000000000000000000000000000000000000000000000000000000000000060368201527fffffffffffff000000000000000000000000000000000000000000000000000060d086901b166037820152603d016109b1565b66ffffffffffffff841161106e576040517fdd0000000000000000000000000000000000000000000000000000000000000060208201527fff00000000000000000000000000000000000000000000000000000000000000821660218201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b1660228201527f870000000000000000000000000000000000000000000000000000000000000060368201527fffffffffffffff0000000000000000000000000000000000000000000000000060c886901b166037820152603e016109b1565b6040517fde0000000000000000000000000000000000000000000000000000000000000060208201527fff00000000000000000000000000000000000000000000000000000000000000821660218201527fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087901b1660228201527f880000000000000000000000000000000000000000000000000000000000000060368201527fffffffffffffffff00000000000000000000000000000000000000000000000060c086901b166037820152603f0160405160208183030381529060405291505b5080516020909101209392505050565b60006104d86111e260408051437fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101406020830152419282019290925260608101919091524260808201524460a08201524660c08201523360e08201526000906101000160405160208183030381529060405280519060200120905090565b83611505565b600061126f61126860408051437fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101406020830152419282019290925260608101919091524260808201524460a08201524660c08201523360e08201526000906101000160405160208183030381529060405280519060200120905090565b8484610539565b9392505050565b600061126f83837f000000000000000000000000ba5ed099633d3b313e4d5f7bdc1305d3c28ba5ed6119ed565b60008451602086018451f090506112b9816123d3565b60405173ffffffffffffffffffffffffffffffffffffffff8216907f4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b51190600090a26000808273ffffffffffffffffffffffffffffffffffffffff168560200151876040516113279190612d29565b60006040518083038185875af1925050503d8060008114611364576040519150601f19603f3d011682016040523d82523d6000602084013e611369565b606091505b5091509150816113c9577f000000000000000000000000ba5ed099633d3b313e4d5f7bdc1305d3c28ba5ed816040517fa57ca23900000000000000000000000000000000000000000000000000000000815260040161062c929190612d94565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ba5ed099633d3b313e4d5f7bdc1305d3c28ba5ed1631156114fb578373ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000ba5ed099633d3b313e4d5f7bdc1305d3c28ba5ed73ffffffffffffffffffffffffffffffffffffffff163160405160006040518083038185875af1925050503d8060008114611495576040519150601f19603f3d011682016040523d82523d6000602084013e61149a565b606091505b509092509050816114fb577f000000000000000000000000ba5ed099633d3b313e4d5f7bdc1305d3c28ba5ed816040517fc2b3f44500000000000000000000000000000000000000000000000000000000815260040161062c929190612d94565b5050949350505050565b600080611511846120db565b905060006040518060400160405280601081526020017f67363d3d37363d34f03d5260086018f30000000000000000000000000000000081525090506000828251602084016000f5905073ffffffffffffffffffffffffffffffffffffffff81166115e0576040517fc05cee7a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ba5ed099633d3b313e4d5f7bdc1305d3c28ba5ed16600482015260240161062c565b604051839073ffffffffffffffffffffffffffffffffffffffff8316907f2feea65dd4e9f9cbd86b74b7734210c59a1b2981b5b137bd0ee3e208200c906790600090a361162c83610823565b935060008173ffffffffffffffffffffffffffffffffffffffff1634876040516116569190612d29565b60006040518083038185875af1925050503d8060008114611693576040519150601f19603f3d011682016040523d82523d6000602084013e611698565b606091505b505090506116a681866124ff565b60405173ffffffffffffffffffffffffffffffffffffffff8616907f4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b51190600090a25050505092915050565b6000806116fd876120db565b9050808651602088018651f59150611714826123d3565b604051819073ffffffffffffffffffffffffffffffffffffffff8416907fb8fda7e00c6b06a2b54e58521bc5894fee35f1090e5a3bb6390bfe2b98b497f790600090a36000808373ffffffffffffffffffffffffffffffffffffffff168660200151886040516117849190612d29565b60006040518083038185875af1925050503d80600081146117c1576040519150601f19603f3d011682016040523d82523d6000602084013e6117c6565b606091505b509150915081611826577f000000000000000000000000ba5ed099633d3b313e4d5f7bdc1305d3c28ba5ed816040517fa57ca23900000000000000000000000000000000000000000000000000000000815260040161062c929190612d94565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ba5ed099633d3b313e4d5f7bdc1305d3c28ba5ed163115611958578473ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000ba5ed099633d3b313e4d5f7bdc1305d3c28ba5ed73ffffffffffffffffffffffffffffffffffffffff163160405160006040518083038185875af1925050503d80600081146118f2576040519150601f19603f3d011682016040523d82523d6000602084013e6118f7565b606091505b50909250905081611958577f000000000000000000000000ba5ed099633d3b313e4d5f7bdc1305d3c28ba5ed816040517fc2b3f44500000000000000000000000000000000000000000000000000000000815260040161062c929190612d94565b50505095945050505050565b60006107b36119e460408051437fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101406020830152419282019290925260608101919091524260808201524460a08201524660c08201523360e08201526000906101000160405160208183030381529060405280519060200120905090565b858585336116f1565b6000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b600080611a23876120db565b905060006040518060400160405280601081526020017f67363d3d37363d34f03d5260086018f30000000000000000000000000000000081525090506000828251602084016000f5905073ffffffffffffffffffffffffffffffffffffffff8116611af2576040517fc05cee7a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ba5ed099633d3b313e4d5f7bdc1305d3c28ba5ed16600482015260240161062c565b604051839073ffffffffffffffffffffffffffffffffffffffff8316907f2feea65dd4e9f9cbd86b74b7734210c59a1b2981b5b137bd0ee3e208200c906790600090a3611b3e83610823565b935060008173ffffffffffffffffffffffffffffffffffffffff1687600001518a604051611b6c9190612d29565b60006040518083038185875af1925050503d8060008114611ba9576040519150601f19603f3d011682016040523d82523d6000602084013e611bae565b606091505b50509050611bbc81866124ff565b60405173ffffffffffffffffffffffffffffffffffffffff8616907f4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b51190600090a260608573ffffffffffffffffffffffffffffffffffffffff1688602001518a604051611c299190612d29565b60006040518083038185875af1925050503d8060008114611c66576040519150601f19603f3d011682016040523d82523d6000602084013e611c6b565b606091505b50909250905081611ccc577f000000000000000000000000ba5ed099633d3b313e4d5f7bdc1305d3c28ba5ed816040517fa57ca23900000000000000000000000000000000000000000000000000000000815260040161062c929190612d94565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ba5ed099633d3b313e4d5f7bdc1305d3c28ba5ed163115611dfe578673ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000ba5ed099633d3b313e4d5f7bdc1305d3c28ba5ed73ffffffffffffffffffffffffffffffffffffffff163160405160006040518083038185875af1925050503d8060008114611d98576040519150601f19603f3d011682016040523d82523d6000602084013e611d9d565b606091505b50909250905081611dfe577f000000000000000000000000ba5ed099633d3b313e4d5f7bdc1305d3c28ba5ed816040517fc2b3f44500000000000000000000000000000000000000000000000000000000815260040161062c929190612d94565b505050505095945050505050565b60006103dd611e8c60408051437fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101406020830152419282019290925260608101919091524260808201524460a08201524660c08201523360e08201526000906101000160405160208183030381529060405280519060200120905090565b868686866116f1565b60006103dd85858585336116f1565b60006103dd611f2460408051437fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101406020830152419282019290925260608101919091524260808201524460a08201524660c08201523360e08201526000906101000160405160208183030381529060405280519060200120905090565b86868686611a17565b6000808360601b90506040517f3d602d80600a3d3981f3363d3d373d3d3d363d7300000000000000000000000081528160148201527f5af43d82803e903d91602b57fd5bf3000000000000000000000000000000000060288201526037816000f092505073ffffffffffffffffffffffffffffffffffffffff8216612016576040517fc05cee7a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ba5ed099633d3b313e4d5f7bdc1305d3c28ba5ed16600482015260240161062c565b60405173ffffffffffffffffffffffffffffffffffffffff8316907f4db17dd5e4732fb6da34a148104a592783ca119a1e7bb8829eba6cbadef0b51190600090a26000808373ffffffffffffffffffffffffffffffffffffffff1634866040516120809190612d29565b60006040518083038185875af1925050503d80600081146120bd576040519150601f19603f3d011682016040523d82523d6000602084013e6120c2565b606091505b50915091506120d282828861247d565b50505092915050565b60008060006120e9846125b3565b9092509050600082600281111561210257612102612e02565b1480156121205750600081600281111561211e5761211e612e02565b145b1561215e57604080513360208201524691810191909152606081018590526080016040516020818303038152906040528051906020012092506123cc565b600082600281111561217257612172612e02565b1480156121905750600181600281111561218e5761218e612e02565b145b156121b0576121a9338560009182526020526040902090565b92506123cc565b60008260028111156121c4576121c4612e02565b03612233576040517f13b3a2a100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ba5ed099633d3b313e4d5f7bdc1305d3c28ba5ed16600482015260240161062c565b600182600281111561224757612247612e02565b1480156122655750600081600281111561226357612263612e02565b145b1561227e576121a9468560009182526020526040902090565b600182600281111561229257612292612e02565b1480156122b0575060028160028111156122ae576122ae612e02565b145b1561231f576040517f13b3a2a100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ba5ed099633d3b313e4d5f7bdc1305d3c28ba5ed16600482015260240161062c565b61239a60408051437fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101406020830152419282019290925260608101919091524260808201524460a08201524660c08201523360e08201526000906101000160405160208183030381529060405280519060200120905090565b84036123a657836123c9565b604080516020810186905201604051602081830303815290604052805190602001205b92505b5050919050565b73ffffffffffffffffffffffffffffffffffffffff8116158061240b575073ffffffffffffffffffffffffffffffffffffffff81163b155b1561247a576040517fc05cee7a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ba5ed099633d3b313e4d5f7bdc1305d3c28ba5ed16600482015260240161062c565b50565b82158061249f575073ffffffffffffffffffffffffffffffffffffffff81163b155b156124fa577f000000000000000000000000ba5ed099633d3b313e4d5f7bdc1305d3c28ba5ed826040517fa57ca23900000000000000000000000000000000000000000000000000000000815260040161062c929190612d94565b505050565b811580612520575073ffffffffffffffffffffffffffffffffffffffff8116155b80612540575073ffffffffffffffffffffffffffffffffffffffff81163b155b156125af576040517fc05cee7a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000ba5ed099633d3b313e4d5f7bdc1305d3c28ba5ed16600482015260240161062c565b5050565b600080606083901c3314801561261057508260141a60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f0100000000000000000000000000000000000000000000000000000000000000145b1561262057506000905080915091565b606083901c3314801561265a57507fff00000000000000000000000000000000000000000000000000000000000000601484901a60f81b16155b1561266b5750600090506001915091565b33606084901c036126825750600090506002915091565b606083901c1580156126db57508260141a60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f0100000000000000000000000000000000000000000000000000000000000000145b156126ec5750600190506000915091565b606083901c15801561272557507fff00000000000000000000000000000000000000000000000000000000000000601484901a60f81b16155b1561273557506001905080915091565b606083901c61274a5750600190506002915091565b8260141a60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f0100000000000000000000000000000000000000000000000000000000000000036127a55750600290506000915091565b8260141a60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166000036127e15750600290506001915091565b506002905080915091565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261282c57600080fd5b813567ffffffffffffffff80821115612847576128476127ec565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561288d5761288d6127ec565b816040528381528660208588010111156128a657600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000604082840312156128d857600080fd5b6040516040810181811067ffffffffffffffff821117156128fb576128fb6127ec565b604052823581526020928301359281019290925250919050565b60008060008060a0858703121561292b57600080fd5b84359350602085013567ffffffffffffffff8082111561294a57600080fd5b6129568883890161281b565b9450604087013591508082111561296c57600080fd5b506129798782880161281b565b92505061298986606087016128c6565b905092959194509250565b600080604083850312156129a757600080fd5b82359150602083013567ffffffffffffffff8111156129c557600080fd5b6129d18582860161281b565b9150509250929050565b6000602082840312156129ed57600080fd5b813567ffffffffffffffff811115612a0457600080fd5b6107b38482850161281b565b803573ffffffffffffffffffffffffffffffffffffffff81168114612a3457600080fd5b919050565b600080600060608486031215612a4e57600080fd5b83359250612a5e60208501612a10565b9150604084013567ffffffffffffffff811115612a7a57600080fd5b612a868682870161281b565b9150509250925092565b600060208284031215612aa257600080fd5b5035919050565b600080600060808486031215612abe57600080fd5b833567ffffffffffffffff80821115612ad657600080fd5b612ae28783880161281b565b94506020860135915080821115612af857600080fd5b50612b058682870161281b565b925050612b1585604086016128c6565b90509250925092565b60008060408385031215612b3157600080fd5b82359150612b4160208401612a10565b90509250929050565b60008060408385031215612b5d57600080fd5b612b6683612a10565b946020939093013593505050565b60008060408385031215612b8757600080fd5b612b9083612a10565b9150602083013567ffffffffffffffff8111156129c557600080fd5b60008060408385031215612bbf57600080fd5b50508035926020909101359150565b60008060008060a08587031215612be457600080fd5b843567ffffffffffffffff80821115612bfc57600080fd5b612c088883890161281b565b95506020870135915080821115612c1e57600080fd5b50612c2b8782880161281b565b935050612c3b86604087016128c6565b915061298960808601612a10565b600080600080600060c08688031215612c6157600080fd5b85359450602086013567ffffffffffffffff80821115612c8057600080fd5b612c8c89838a0161281b565b95506040880135915080821115612ca257600080fd5b50612caf8882890161281b565b935050612cbf87606088016128c6565b9150612ccd60a08701612a10565b90509295509295909350565b600080600060608486031215612cee57600080fd5b8335925060208401359150612b1560408501612a10565b60005b83811015612d20578181015183820152602001612d08565b50506000910152565b60008251612d3b818460208701612d05565b9190910192915050565b67ffffffffffffffff828116828216039080821115612d8d577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b5092915050565b73ffffffffffffffffffffffffffffffffffffffff831681526040602082015260008251806040840152612dcf816060850160208701612d05565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016060019392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c6343000817000a6040608081526004908136101561001557600080fd5b600090813560e01c80630d58b1db1461126c578063137c29fe146110755780632a2d80d114610db75780632b67b57014610bde57806330f28b7a14610ade5780633644e51514610a9d57806336c7851614610a285780633ff9dcb1146109a85780634fe02b441461093f57806365d9723c146107ac57806387517c451461067a578063927da105146105c3578063cc53287f146104a3578063edd9444b1461033a5763fe8ec1a7146100c657600080fd5b346103365760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103365767ffffffffffffffff833581811161033257610114903690860161164b565b60243582811161032e5761012b903690870161161a565b6101336114e6565b9160843585811161032a5761014b9036908a016115c1565b98909560a43590811161032657610164913691016115c1565b969095815190610173826113ff565b606b82527f5065726d697442617463685769746e6573735472616e7366657246726f6d285460208301527f6f6b656e5065726d697373696f6e735b5d207065726d69747465642c61646472838301527f657373207370656e6465722c75696e74323536206e6f6e63652c75696e74323560608301527f3620646561646c696e652c000000000000000000000000000000000000000000608083015282519a8b9181610222602085018096611f93565b918237018a8152039961025b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09b8c8101835282611437565b5190209085515161026b81611ebb565b908a5b8181106102f95750506102f6999a6102ed9183516102a081610294602082018095611f66565b03848101835282611437565b519020602089810151858b015195519182019687526040820192909252336060820152608081019190915260a081019390935260643560c08401528260e081015b03908101835282611437565b51902093611cf7565b80f35b8061031161030b610321938c5161175e565b51612054565b61031b828661175e565b52611f0a565b61026e565b8880fd5b8780fd5b8480fd5b8380fd5b5080fd5b5091346103365760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103365767ffffffffffffffff9080358281116103325761038b903690830161164b565b60243583811161032e576103a2903690840161161a565b9390926103ad6114e6565b9160643590811161049f576103c4913691016115c1565b949093835151976103d489611ebb565b98885b81811061047d5750506102f697988151610425816103f9602082018095611f66565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282611437565b5190206020860151828701519083519260208401947ffcf35f5ac6a2c28868dc44c302166470266239195f02b0ee408334829333b7668652840152336060840152608083015260a082015260a081526102ed8161141b565b808b61031b8261049461030b61049a968d5161175e565b9261175e565b6103d7565b8680fd5b5082346105bf57602090817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103325780359067ffffffffffffffff821161032e576104f49136910161161a565b929091845b848110610504578580f35b8061051a610515600193888861196c565b61197c565b61052f84610529848a8a61196c565b0161197c565b3389528385528589209173ffffffffffffffffffffffffffffffffffffffff80911692838b528652868a20911690818a5285528589207fffffffffffffffffffffffff000000000000000000000000000000000000000081541690558551918252848201527f89b1add15eff56b3dfe299ad94e01f2b52fbcb80ae1a3baea6ae8c04cb2b98a4853392a2016104f9565b8280fd5b50346103365760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261033657610676816105ff6114a0565b936106086114c3565b6106106114e6565b73ffffffffffffffffffffffffffffffffffffffff968716835260016020908152848420928816845291825283832090871683528152919020549251938316845260a083901c65ffffffffffff169084015260d09190911c604083015281906060820190565b0390f35b50346103365760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610336576106b26114a0565b906106bb6114c3565b916106c46114e6565b65ffffffffffff926064358481169081810361032a5779ffffffffffff0000000000000000000000000000000000000000947fda9fa7c1b00402c17d0161b249b1ab8bbec047c5a52207b9c112deffd817036b94338a5260016020527fffffffffffff0000000000000000000000000000000000000000000000000000858b209873ffffffffffffffffffffffffffffffffffffffff809416998a8d5260205283878d209b169a8b8d52602052868c209486156000146107a457504216925b8454921697889360a01b16911617179055815193845260208401523392a480f35b905092610783565b5082346105bf5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105bf576107e56114a0565b906107ee6114c3565b9265ffffffffffff604435818116939084810361032a57338852602091600183528489209673ffffffffffffffffffffffffffffffffffffffff80911697888b528452858a20981697888a5283528489205460d01c93848711156109175761ffff9085840316116108f05750907f55eb90d810e1700b35a8e7e25395ff7f2b2259abd7415ca2284dfb1c246418f393929133895260018252838920878a528252838920888a5282528389209079ffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffff000000000000000000000000000000000000000000000000000083549260d01b16911617905582519485528401523392a480f35b84517f24d35a26000000000000000000000000000000000000000000000000000000008152fd5b5084517f756688fe000000000000000000000000000000000000000000000000000000008152fd5b503461033657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610336578060209273ffffffffffffffffffffffffffffffffffffffff61098f6114a0565b1681528084528181206024358252845220549051908152f35b5082346105bf57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105bf577f3704902f963766a4e561bbaab6e6cdc1b1dd12f6e9e99648da8843b3f46b918d90359160243533855284602052818520848652602052818520818154179055815193845260208401523392a280f35b8234610a9a5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610a9a57610a606114a0565b610a686114c3565b610a706114e6565b6064359173ffffffffffffffffffffffffffffffffffffffff8316830361032e576102f6936117a1565b80fd5b503461033657817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261033657602090610ad7611b1e565b9051908152f35b508290346105bf576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105bf57610b1a3661152a565b90807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7c36011261033257610b4c611478565b9160e43567ffffffffffffffff8111610bda576102f694610b6f913691016115c1565b939092610b7c8351612054565b6020840151828501519083519260208401947f939c21a48a8dbe3a9a2404a1d46691e4d39f6583d6ec6b35714604c986d801068652840152336060840152608083015260a082015260a08152610bd18161141b565b51902091611c25565b8580fd5b509134610336576101007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261033657610c186114a0565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc360160c08112610332576080855191610c51836113e3565b1261033257845190610c6282611398565b73ffffffffffffffffffffffffffffffffffffffff91602435838116810361049f578152604435838116810361049f57602082015265ffffffffffff606435818116810361032a5788830152608435908116810361049f576060820152815260a435938285168503610bda576020820194855260c4359087830182815260e43567ffffffffffffffff811161032657610cfe90369084016115c1565b929093804211610d88575050918591610d786102f6999a610d7e95610d238851611fbe565b90898c511690519083519260208401947ff3841cd1ff0085026a6327b620b67997ce40f282c88a8e905a7a5626e310f3d086528401526060830152608082015260808152610d70816113ff565b519020611bd9565b916120c7565b519251169161199d565b602492508a51917fcd21db4f000000000000000000000000000000000000000000000000000000008352820152fd5b5091346103365760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc93818536011261033257610df36114a0565b9260249081359267ffffffffffffffff9788851161032a578590853603011261049f578051978589018981108282111761104a578252848301358181116103265785019036602383011215610326578382013591610e50836115ef565b90610e5d85519283611437565b838252602093878584019160071b83010191368311611046578801905b828210610fe9575050508a526044610e93868801611509565b96838c01978852013594838b0191868352604435908111610fe557610ebb90369087016115c1565b959096804211610fba575050508998995151610ed681611ebb565b908b5b818110610f9757505092889492610d7892610f6497958351610f02816103f98682018095611f66565b5190209073ffffffffffffffffffffffffffffffffffffffff9a8b8b51169151928551948501957faf1b0d30d2cab0380e68f0689007e3254993c596f2fdd0aaa7f4d04f794408638752850152830152608082015260808152610d70816113ff565b51169082515192845b848110610f78578580f35b80610f918585610f8b600195875161175e565b5161199d565b01610f6d565b80610311610fac8e9f9e93610fb2945161175e565b51611fbe565b9b9a9b610ed9565b8551917fcd21db4f000000000000000000000000000000000000000000000000000000008352820152fd5b8a80fd5b6080823603126110465785608091885161100281611398565b61100b85611509565b8152611018838601611509565b838201526110278a8601611607565b8a8201528d611037818701611607565b90820152815201910190610e7a565b8c80fd5b84896041867f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b5082346105bf576101407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105bf576110b03661152a565b91807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7c360112610332576110e2611478565b67ffffffffffffffff93906101043585811161049f5761110590369086016115c1565b90936101243596871161032a57611125610bd1966102f6983691016115c1565b969095825190611134826113ff565b606482527f5065726d69745769746e6573735472616e7366657246726f6d28546f6b656e5060208301527f65726d697373696f6e73207065726d69747465642c6164647265737320737065848301527f6e6465722c75696e74323536206e6f6e63652c75696e7432353620646561646c60608301527f696e652c0000000000000000000000000000000000000000000000000000000060808301528351948591816111e3602085018096611f93565b918237018b8152039361121c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe095868101835282611437565b5190209261122a8651612054565b6020878101518589015195519182019687526040820192909252336060820152608081019190915260a081019390935260e43560c08401528260e081016102e1565b5082346105bf576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261033257813567ffffffffffffffff92838211610bda5736602383011215610bda5781013592831161032e576024906007368386831b8401011161049f57865b8581106112e5578780f35b80821b83019060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc83360301126103265761139288876001946060835161132c81611398565b611368608461133c8d8601611509565b9485845261134c60448201611509565b809785015261135d60648201611509565b809885015201611509565b918291015273ffffffffffffffffffffffffffffffffffffffff80808093169516931691166117a1565b016112da565b6080810190811067ffffffffffffffff8211176113b457604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6060810190811067ffffffffffffffff8211176113b457604052565b60a0810190811067ffffffffffffffff8211176113b457604052565b60c0810190811067ffffffffffffffff8211176113b457604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176113b457604052565b60c4359073ffffffffffffffffffffffffffffffffffffffff8216820361149b57565b600080fd5b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361149b57565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361149b57565b6044359073ffffffffffffffffffffffffffffffffffffffff8216820361149b57565b359073ffffffffffffffffffffffffffffffffffffffff8216820361149b57565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc01906080821261149b576040805190611563826113e3565b8082941261149b57805181810181811067ffffffffffffffff8211176113b457825260043573ffffffffffffffffffffffffffffffffffffffff8116810361149b578152602435602082015282526044356020830152606435910152565b9181601f8401121561149b5782359167ffffffffffffffff831161149b576020838186019501011161149b57565b67ffffffffffffffff81116113b45760051b60200190565b359065ffffffffffff8216820361149b57565b9181601f8401121561149b5782359167ffffffffffffffff831161149b576020808501948460061b01011161149b57565b91909160608184031261149b576040805191611666836113e3565b8294813567ffffffffffffffff9081811161149b57830182601f8201121561149b578035611693816115ef565b926116a087519485611437565b818452602094858086019360061b8501019381851161149b579086899897969594939201925b8484106116e3575050505050855280820135908501520135910152565b90919293949596978483031261149b578851908982019082821085831117611730578a928992845261171487611509565b81528287013583820152815201930191908897969594936116c6565b602460007f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b80518210156117725760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b92919273ffffffffffffffffffffffffffffffffffffffff604060008284168152600160205282828220961695868252602052818120338252602052209485549565ffffffffffff8760a01c16804211611884575082871696838803611812575b5050611810955016926118b5565b565b878484161160001461184f57602488604051907ff96fb0710000000000000000000000000000000000000000000000000000000082526004820152fd5b7fffffffffffffffffffffffff000000000000000000000000000000000000000084846118109a031691161790553880611802565b602490604051907fd81b2f2e0000000000000000000000000000000000000000000000000000000082526004820152fd5b9060006064926020958295604051947f23b872dd0000000000000000000000000000000000000000000000000000000086526004860152602485015260448401525af13d15601f3d116001600051141617161561190e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c45440000000000000000000000006044820152fd5b91908110156117725760061b0190565b3573ffffffffffffffffffffffffffffffffffffffff8116810361149b5790565b9065ffffffffffff908160608401511673ffffffffffffffffffffffffffffffffffffffff908185511694826020820151169280866040809401511695169560009187835260016020528383208984526020528383209916988983526020528282209184835460d01c03611af5579185611ace94927fc6a377bfc4eb120024a8ac08eef205be16b817020812c73223e81d1bdb9708ec98979694508715600014611ad35779ffffffffffff00000000000000000000000000000000000000009042165b60a01b167fffffffffffff00000000000000000000000000000000000000000000000000006001860160d01b1617179055519384938491604091949373ffffffffffffffffffffffffffffffffffffffff606085019616845265ffffffffffff809216602085015216910152565b0390a4565b5079ffffffffffff000000000000000000000000000000000000000087611a60565b600484517f756688fe000000000000000000000000000000000000000000000000000000008152fd5b467f000000000000000000000000000000000000000000000000000000000000000103611b69577f866a5aba21966af95d6c7ab78eb2b2fc913915c28be3b9aa07cc04ff903e3f2890565b60405160208101907f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86682527f9ac997416e8ff9d2ff6bebeb7149f65cdae5e32e2b90440b566bb3044041d36a604082015246606082015230608082015260808152611bd3816113ff565b51902090565b611be1611b1e565b906040519060208201927f190100000000000000000000000000000000000000000000000000000000000084526022830152604282015260428152611bd381611398565b9192909360a435936040840151804211611cc65750602084510151808611611c955750918591610d78611c6594611c60602088015186611e47565b611bd9565b73ffffffffffffffffffffffffffffffffffffffff809151511692608435918216820361149b57611810936118b5565b602490604051907f3728b83d0000000000000000000000000000000000000000000000000000000082526004820152fd5b602490604051907fcd21db4f0000000000000000000000000000000000000000000000000000000082526004820152fd5b959093958051519560409283830151804211611e175750848803611dee57611d2e918691610d7860209b611c608d88015186611e47565b60005b868110611d42575050505050505050565b611d4d81835161175e565b5188611d5a83878a61196c565b01359089810151808311611dbe575091818888886001968596611d84575b50505050505001611d31565b611db395611dad9273ffffffffffffffffffffffffffffffffffffffff6105159351169561196c565b916118b5565b803888888883611d78565b6024908651907f3728b83d0000000000000000000000000000000000000000000000000000000082526004820152fd5b600484517fff633a38000000000000000000000000000000000000000000000000000000008152fd5b6024908551907fcd21db4f0000000000000000000000000000000000000000000000000000000082526004820152fd5b9073ffffffffffffffffffffffffffffffffffffffff600160ff83161b9216600052600060205260406000209060081c6000526020526040600020818154188091551615611e9157565b60046040517f756688fe000000000000000000000000000000000000000000000000000000008152fd5b90611ec5826115ef565b611ed26040519182611437565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611f0082946115ef565b0190602036910137565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611f375760010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b805160208092019160005b828110611f7f575050505090565b835185529381019392810192600101611f71565b9081519160005b838110611fab575050016000815290565b8060208092840101518185015201611f9a565b60405160208101917f65626cad6cb96493bf6f5ebea28756c966f023ab9e8a83a7101849d5573b3678835273ffffffffffffffffffffffffffffffffffffffff8082511660408401526020820151166060830152606065ffffffffffff9182604082015116608085015201511660a082015260a0815260c0810181811067ffffffffffffffff8211176113b45760405251902090565b6040516020808201927f618358ac3db8dc274f0cd8829da7e234bd48cd73c4a740aede1adec9846d06a1845273ffffffffffffffffffffffffffffffffffffffff81511660408401520151606082015260608152611bd381611398565b919082604091031261149b576020823592013590565b6000843b61222e5750604182036121ac576120e4828201826120b1565b939092604010156117725760209360009360ff6040608095013560f81c5b60405194855216868401526040830152606082015282805260015afa156121a05773ffffffffffffffffffffffffffffffffffffffff806000511691821561217657160361214c57565b60046040517f815e1d64000000000000000000000000000000000000000000000000000000008152fd5b60046040517f8baa579f000000000000000000000000000000000000000000000000000000008152fd5b6040513d6000823e3d90fd5b60408203612204576121c0918101906120b1565b91601b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84169360ff1c019060ff8211611f375760209360009360ff608094612102565b60046040517f4be6321b000000000000000000000000000000000000000000000000000000008152fd5b929391601f928173ffffffffffffffffffffffffffffffffffffffff60646020957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0604051988997889687947f1626ba7e000000000000000000000000000000000000000000000000000000009e8f8752600487015260406024870152816044870152868601378b85828601015201168101030192165afa9081156123a857829161232a575b507fffffffff000000000000000000000000000000000000000000000000000000009150160361230057565b60046040517fb0669cbc000000000000000000000000000000000000000000000000000000008152fd5b90506020813d82116123a0575b8161234460209383611437565b810103126103365751907fffffffff0000000000000000000000000000000000000000000000000000000082168203610a9a57507fffffffff0000000000000000000000000000000000000000000000000000000090386122d4565b3d9150612337565b6040513d84823e3d90fdfea164736f6c6343000811000a60806040526004361015610023575b361561001957600080fd5b610021615531565b005b60003560e01c80630396cb60146101b35780630bd28e3b146101aa5780631b2e01b8146101a15780631d732756146101985780631fad948c1461018f578063205c28781461018657806335567e1a1461017d5780634b1d7cf5146101745780635287ce121461016b57806370a08231146101625780638f41ec5a14610159578063957122ab146101505780639b249f6914610147578063a61935311461013e578063b760faf914610135578063bb9fe6bf1461012c578063c23a5cea14610123578063d6383f941461011a578063ee219423146101115763fc7e286d0361000e5761010c611bcd565b61000e565b5061010c6119b5565b5061010c61184d565b5061010c6116b4565b5061010c611536565b5061010c6114f7565b5061010c6114d6565b5061010c611337565b5061010c611164565b5061010c611129565b5061010c6110a4565b5061010c610f54565b5061010c610bf8565b5061010c610b33565b5061010c610994565b5061010c6108ba565b5061010c6106e7565b5061010c610467565b5061010c610385565b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043563ffffffff8116808203610359576103547fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01916102716102413373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b9161024d811515615697565b61026a610261600185015463ffffffff1690565b63ffffffff1690565b11156156fc565b54926103366dffffffffffffffffffffffffffff946102f461029834888460781c166121d5565b966102a4881515615761565b6102b0818911156157c6565b6102d4816102bc6105ec565b941684906dffffffffffffffffffffffffffff169052565b6001602084015287166dffffffffffffffffffffffffffff166040830152565b63ffffffff83166060820152600060808201526103313373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b61582b565b6040805194855263ffffffff90911660208501523393918291820190565b0390a2005b600080fd5b6024359077ffffffffffffffffffffffffffffffffffffffffffffffff8216820361035957565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043577ffffffffffffffffffffffffffffffffffffffffffffffff81168103610359576104149033600052600160205260406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b61041e8154612491565b9055005b73ffffffffffffffffffffffffffffffffffffffff81160361035957565b6024359061044d82610422565b565b60c4359061044d82610422565b359061044d82610422565b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760206104fc6004356104a881610422565b73ffffffffffffffffffffffffffffffffffffffff6104c561035e565b91166000526001835260406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b54604051908152f35b507f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60a0810190811067ffffffffffffffff82111761055157604052565b610559610505565b604052565b610100810190811067ffffffffffffffff82111761055157604052565b67ffffffffffffffff811161055157604052565b6060810190811067ffffffffffffffff82111761055157604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761055157604052565b6040519061044d82610535565b6040519060c0820182811067ffffffffffffffff82111761055157604052565b604051906040820182811067ffffffffffffffff82111761055157604052565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209267ffffffffffffffff8111610675575b01160190565b61067d610505565b61066f565b92919261068e82610639565b9161069c60405193846105ab565b829481845281830111610359578281602093846000960137010152565b9181601f840112156103595782359167ffffffffffffffff8311610359576020838186019501011161035957565b5034610359576101c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595767ffffffffffffffff60043581811161035957366023820112156103595761074a903690602481600401359101610682565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36016101808112610359576101006040519161078783610535565b12610359576040516107988161055e565b6107a0610440565b815260443560208201526064356040820152608435606082015260a43560808201526107ca61044f565b60a082015260e43560c08201526101043560e082015281526101243560208201526101443560408201526101643560608201526101843560808201526101a4359182116103595761083e9261082661082e9336906004016106b9565b9290916128b1565b6040519081529081906020820190565b0390f35b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126103595760043567ffffffffffffffff9283821161035957806023830112156103595781600401359384116103595760248460051b830101116103595760240191906024356108b781610422565b90565b5034610359576108c936610842565b6108d4929192611e3a565b6108dd83611d2d565b60005b84811061095d57506000927fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f9728480a183915b85831061092d576109238585611ed7565b6100216001600255565b909193600190610953610941878987611dec565b61094b8886611dca565b51908861233f565b0194019190610912565b8061098b610984610972600194869896611dca565b5161097e848a88611dec565b84613448565b9083612f30565b019290926108e0565b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576004356109d081610422565b6024359060009133835282602052604083206dffffffffffffffffffffffffffff81541692838311610ad557848373ffffffffffffffffffffffffffffffffffffffff829593610a788496610a3f610a2c8798610ad29c6121c0565b6dffffffffffffffffffffffffffff1690565b6dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b6040805173ffffffffffffffffffffffffffffffffffffffff831681526020810185905233917fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb91a2165af1610acc611ea7565b50615ba2565b80f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f576974686472617720616d6f756e7420746f6f206c61726765000000000000006044820152fd5b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576020600435610b7181610422565b73ffffffffffffffffffffffffffffffffffffffff610b8e61035e565b911660005260018252610bc98160406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000006040519260401b16178152f35b503461035957610c0736610842565b610c0f611e3a565b6000805b838210610df657610c249150611d2d565b7fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f972600080a16000805b848110610d5c57505060008093815b818110610c9357610923868660007f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d8180a2611ed7565b610cf7610ca182848a6124cb565b610ccc610cb3610cb36020840161256d565b73ffffffffffffffffffffffffffffffffffffffff1690565b7f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d600080a280612519565b906000915b808310610d1457505050610d0f90612491565b610c5c565b90919497610d4f610d49610d5592610d438c8b610d3c82610d368e8b8d611dec565b92611dca565b519161233f565b906121d5565b99612491565b95612491565b9190610cfc565b610d678186886124cb565b6020610d7f610d768380612519565b9290930161256d565b9173ffffffffffffffffffffffffffffffffffffffff60009316905b828410610db45750505050610daf90612491565b610c4d565b90919294610d4f81610de985610de2610dd0610dee968d611dca565b51610ddc8c8b8a611dec565b85613448565b908b613148565b612491565b929190610d9b565b610e018285876124cb565b90610e0c8280612519565b92610e1c610cb36020830161256d565b9173ffffffffffffffffffffffffffffffffffffffff8316610e416001821415612577565b610e62575b505050610e5c91610e56916121d5565b91612491565b90610c13565b909592610e7b6040999693999895989788810190611fc8565b92908a3b156103595789938b918a5193849283927fe3563a4f00000000000000000000000000000000000000000000000000000000845260049e8f850193610ec294612711565b03815a93600094fa9081610f3b575b50610f255786517f86a9f75000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a16818a0190815281906020010390fd5b0390fd5b9497509295509093509181610e56610e5c610e46565b80610f48610f4e9261057b565b8061111e565b38610ed1565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595761083e73ffffffffffffffffffffffffffffffffffffffff600435610fa881610422565b608060409283928351610fba81610535565b60009381858093528260208201528287820152826060820152015216815280602052209061104965ffffffffffff6001835194610ff686610535565b80546dffffffffffffffffffffffffffff8082168852607082901c60ff161515602089015260789190911c1685870152015463ffffffff8116606086015260201c16608084019065ffffffffffff169052565b5191829182919091608065ffffffffffff8160a08401956dffffffffffffffffffffffffffff808251168652602082015115156020870152604082015116604086015263ffffffff6060820151166060860152015116910152565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595773ffffffffffffffffffffffffffffffffffffffff6004356110f581610422565b16600052600060205260206dffffffffffffffffffffffffffff60406000205416604051908152f35b600091031261035957565b50346103595760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261035957602060405160018152f35b50346103595760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261035957600467ffffffffffffffff8135818111610359576111b590369084016106b9565b9050602435916111c483610422565b604435908111610359576111db90369085016106b9565b92909115908161132d575b506112c6576014821015611236575b610f21836040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160409060208152600060208201520190565b6112466112529261124c92612b88565b90612b96565b60601c90565b3b1561125f5738806111f5565b610f21906040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160609060208152601b60208201527f41413330207061796d6173746572206e6f74206465706c6f796564000000000060408201520190565b610f21836040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160609060208152601960208201527f41413230206163636f756e74206e6f74206465706c6f7965640000000000000060408201520190565b90503b15386111e6565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043567ffffffffffffffff81116103595761138960249136906004016106b9565b906113bf6040519283927f570e1a3600000000000000000000000000000000000000000000000000000000845260048401612d2c565b0360208273ffffffffffffffffffffffffffffffffffffffff92816000857f0000000000000000000000007fc98430eaedbb6070b35b39d798725049088348165af1918215611471575b600092611441575b50604051917f6ca7b806000000000000000000000000000000000000000000000000000000008352166004820152fd5b61146391925060203d811161146a575b61145b81836105ab565b810190612d17565b9038611411565b503d611451565b611479612183565b611409565b90816101609103126103595790565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc820112610359576004359067ffffffffffffffff8211610359576108b79160040161147e565b50346103595760206114ef6114ea3661148d565b612a0c565b604051908152f35b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595761002160043561153181610422565b61562b565b5034610359576000807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126116b1573381528060205260408120600181019063ffffffff825416908115611653576115f06115b5611618936115a76115a2855460ff9060701c1690565b61598f565b65ffffffffffff42166159f4565b84547fffffffffffffffffffffffffffffffffffffffffffff000000000000ffffffff16602082901b69ffffffffffff000000001617909455565b7fffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffff8154169055565b60405165ffffffffffff91909116815233907ffa9b3c14cc825c412c9ed81b3ba365a5b459439403f18829e572ed53a4180f0a90602090a280f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6e6f74207374616b6564000000000000000000000000000000000000000000006044820152fd5b80fd5b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576004356116f081610422565b610ad273ffffffffffffffffffffffffffffffffffffffff6117323373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b926117ea611755610a2c86546dffffffffffffffffffffffffffff9060781c1690565b94611761861515615a0e565b6117c26001820161179a65ffffffffffff611786835465ffffffffffff9060201c1690565b16611792811515615a73565b421015615ad8565b80547fffffffffffffffffffffffffffffffffffffffffffff00000000000000000000169055565b7fffffff0000000000000000000000000000ffffffffffffffffffffffffffffff8154169055565b6040805173ffffffffffffffffffffffffffffffffffffffff831681526020810186905233917fb7c918e0e249f999e965cafeb6c664271b3f4317d296461500e71da39f0cbda391a2600080809581948294165af1611847611ea7565b50615b3d565b50346103595760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595767ffffffffffffffff6004358181116103595761189e90369060040161147e565b602435916118ab83610422565b604435908111610359576118c6610f219136906004016106b9565b6118ce611caa565b6118d785612e2b565b6118ea6118e48287613240565b906153ba565b946118fa826000924384526121e2565b96438252819360609573ffffffffffffffffffffffffffffffffffffffff8316611981575b50505050608001519361194e6040611940602084015165ffffffffffff1690565b92015165ffffffffffff1690565b906040519687967f8b7ac980000000000000000000000000000000000000000000000000000000008852600488016127e1565b8395508394965061199b60409492939451809481936127d3565b03925af19060806119aa611ea7565b92919038808061191f565b5034610359576119c43661148d565b6119cc611caa565b6119d582612e2b565b6119df8183613240565b825160a00151919391611a0c9073ffffffffffffffffffffffffffffffffffffffff166154dc565b6154dc565b90611a30611a07855173ffffffffffffffffffffffffffffffffffffffff90511690565b94611a39612b50565b50611a68611a4c60409586810190611fc8565b90600060148310611bc55750611246611a079261124c92612b88565b91611a72916153ba565b805173ffffffffffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff821660018114916080880151978781015191886020820151611ac79065ffffffffffff1690565b91015165ffffffffffff16916060015192611ae06105f9565b9a8b5260208b0152841515898b015265ffffffffffff1660608a015265ffffffffffff16608089015260a088015215159081611bbc575b50611b515750610f2192519485947fe0cff05f00000000000000000000000000000000000000000000000000000000865260048601612cbd565b9190610f2193611b60846154dc565b611b87611b6b610619565b73ffffffffffffffffffffffffffffffffffffffff9096168652565b6020850152519586957ffaecb4e400000000000000000000000000000000000000000000000000000000875260048701612c2b565b90501538611b17565b9150506154dc565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595773ffffffffffffffffffffffffffffffffffffffff600435611c1e81610422565b16600052600060205260a0604060002065ffffffffffff60018254920154604051926dffffffffffffffffffffffffffff90818116855260ff8160701c161515602086015260781c16604084015263ffffffff8116606084015260201c166080820152f35b60209067ffffffffffffffff8111611c9d575b60051b0190565b611ca5610505565b611c96565b60405190611cb782610535565b604051608083610100830167ffffffffffffffff811184821017611d20575b60405260009283815283602082015283604082015283606082015283838201528360a08201528360c08201528360e082015281528260208201528260408201528260608201520152565b611d28610505565b611cd6565b90611d3782611c83565b611d4460405191826105ab565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611d728294611c83565b019060005b828110611d8357505050565b602090611d8e611caa565b82828501015201611d77565b507f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020918151811015611ddf575b60051b010190565b611de7611d9a565b611dd7565b9190811015611e2d575b60051b810135907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea181360301821215610359570190565b611e35611d9a565b611df6565b6002805414611e495760028055565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152fd5b3d15611ed2573d90611eb882610639565b91611ec660405193846105ab565b82523d6000602084013e565b606090565b73ffffffffffffffffffffffffffffffffffffffff168015611f6a57600080809381935af1611f04611ea7565b5015611f0c57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f41413931206661696c65642073656e6420746f2062656e6566696369617279006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4141393020696e76616c69642062656e656669636961727900000000000000006044820152fd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610359570180359067ffffffffffffffff82116103595760200191813603831361035957565b90816020910312610359575190565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b60005b83811061207a5750506000910152565b818101518382015260200161206a565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6020936120c681518092818752878088019101612067565b0116010190565b906120e76080916108b796946101c0808652850191612028565b9360e0815173ffffffffffffffffffffffffffffffffffffffff80825116602087015260208201516040870152604082015160608701526060820151858701528482015160a087015260a08201511660c086015260c081015182860152015161010084015260208101516101208401526040810151610140840152606081015161016084015201516101808201526101a081840391015261208a565b506040513d6000823e3d90fd5b507f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b919082039182116121cd57565b61044d612190565b919082018092116121cd57565b905a918160206121fb6060830151936060810190611fc8565b906122348560405195869485947f1d732756000000000000000000000000000000000000000000000000000000008652600486016120cd565b03816000305af16000918161230f575b50612308575060206000803e7fdeaddead000000000000000000000000000000000000000000000000000000006000511461229b5761229561228a6108b7945a906121c0565b6080840151906121d5565b91614afc565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152600f60408201527f41413935206f7574206f6620676173000000000000000000000000000000000060608201520190565b9250505090565b61233191925060203d8111612338575b61232981836105ab565b810190612019565b9038612244565b503d61231f565b909291925a9380602061235b6060830151946060810190611fc8565b906123948660405195869485947f1d732756000000000000000000000000000000000000000000000000000000008652600486016120cd565b03816000305af160009181612471575b5061246a575060206000803e7fdeaddead00000000000000000000000000000000000000000000000000000000600051146123fc576123f66123eb6108b795965a906121c0565b6080830151906121d5565b92614ddf565b610f21836040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152600f60408201527f41413935206f7574206f6620676173000000000000000000000000000000000060608201520190565b9450505050565b61248a91925060203d81116123385761232981836105ab565b90386123a4565b6001907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146124bf570190565b6124c7612190565b0190565b919081101561250c575b60051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa181360301821215610359570190565b612514611d9a565b6124d5565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610359570180359067ffffffffffffffff821161035957602001918160051b3603831361035957565b356108b781610422565b1561257e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4141393620696e76616c69642061676772656761746f720000000000000000006044820152fd5b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561035957016020813591019167ffffffffffffffff821161035957813603831361035957565b6108b7916126578161263d8461045c565b73ffffffffffffffffffffffffffffffffffffffff169052565b602082013560208201526126f26126a361268861267760408601866125dc565b610160806040880152860191612028565b61269560608601866125dc565b908583036060870152612028565b6080840135608084015260a084013560a084015260c084013560c084015260e084013560e084015261010080850135908401526101206126e5818601866125dc565b9185840390860152612028565b9161270361014091828101906125dc565b929091818503910152612028565b949391929083604087016040885252606086019360608160051b8801019482600090815b848310612754575050505050508460206108b795968503910152612028565b9091929394977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08b820301855288357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea1843603018112156127cf57600191846127bd920161262c565b98602090810196950193019190612735565b8280fd5b908092918237016000815290565b9290936108b796959260c0958552602085015265ffffffffffff8092166040850152166060830152151560808201528160a0820152019061208a565b1561282457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4141393220696e7465726e616c2063616c6c206f6e6c790000000000000000006044820152fd5b9060406108b79260008152816020820152019061208a565b6040906108b793928152816020820152019061208a565b909291925a936128c230331461281d565b8151946040860151955a6113886060830151890101116129e2576108b7966000958051612909575b50505090612903915a9003608084015101943691610682565b91615047565b612938916129349161292f855173ffffffffffffffffffffffffffffffffffffffff1690565b615c12565b1590565b612944575b80806128ea565b61290392919450612953615c24565b908151612967575b5050600193909161293d565b7f1c4fada7374c0a9ee8841fc38afe82932dc0f8e69012e927f061a8bae611a20173ffffffffffffffffffffffffffffffffffffffff6020870151926129d860206129c6835173ffffffffffffffffffffffffffffffffffffffff1690565b9201519560405193849316968361289a565b0390a3388061295b565b7fdeaddead0000000000000000000000000000000000000000000000000000000060005260206000fd5b612a22612a1c6040830183611fc8565b90615c07565b90612a33612a1c6060830183611fc8565b90612ae9612a48612a1c610120840184611fc8565b60405194859360208501956101008201359260e08301359260c08101359260a08201359260808301359273ffffffffffffffffffffffffffffffffffffffff60208201359135168c9693909a9998959261012098959273ffffffffffffffffffffffffffffffffffffffff6101408a019d168952602089015260408801526060870152608086015260a085015260c084015260e08301526101008201520152565b0391612b1b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938481018352826105ab565b51902060408051602081019283523091810191909152466060820152608092830181529091612b4a90826105ab565b51902090565b604051906040820182811067ffffffffffffffff821117612b7b575b60405260006020838281520152565b612b83610505565b612b6c565b906014116103595790601490565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000009035818116939260148110612bcb57505050565b60140360031b82901b16169150565b9060c060a06108b793805184526020810151602085015260408101511515604085015265ffffffffffff80606083015116606086015260808201511660808501520151918160a0820152019061208a565b9294612c8c61044d95612c7a610100959998612c68612c54602097610140808c528b0190612bda565b9b878a019060208091805184520151910152565b80516060890152602001516080880152565b805160a08701526020015160c0860152565b73ffffffffffffffffffffffffffffffffffffffff81511660e0850152015191019060208091805184520151910152565b612d0661044d94612cf4612cdf60a0959998969960e0865260e0860190612bda565b98602085019060208091805184520151910152565b80516060840152602001516080830152565b019060208091805184520151910152565b9081602091031261035957516108b781610422565b9160206108b7938181520191612028565b90612d6c73ffffffffffffffffffffffffffffffffffffffff916108b797959694606085526060850191612028565b941660208201526040818503910152612028565b60009060033d11612d8d57565b905060046000803e60005160e01c90565b600060443d106108b7576040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc91823d016004833e815167ffffffffffffffff918282113d602484011117612e1a57818401948551938411612e22573d85010160208487010111612e1a57506108b7929101602001906105ab565b949350505050565b50949350505050565b612e386040820182611fc8565b612e50612e448461256d565b93610120810190611fc8565b9290303b1561035957600093612e949160405196879586957f957122ab00000000000000000000000000000000000000000000000000000000875260048701612d3d565b0381305afa9081612f1d575b5061044d576001612eaf612d80565b6308c379a014612ec8575b612ec057565b61044d612183565b612ed0612d9e565b80612edc575b50612eba565b80516000925015612ed657610f21906040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301612882565b80610f48612f2a9261057b565b38612ea0565b9190612f3b9061317f565b73ffffffffffffffffffffffffffffffffffffffff929183166130da5761306c57612f659061317f565b9116612ffe57612f725750565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602160448201527f41413332207061796d61737465722065787069726564206f72206e6f7420647560648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a490fd5b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601460408201527f41413334207369676e6174757265206572726f7200000000000000000000000060608201520190565b610f21836040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601760408201527f414132322065787069726564206f72206e6f742064756500000000000000000060608201520190565b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601460408201527f41413234207369676e6174757265206572726f7200000000000000000000000060608201520190565b9291906131549061317f565b909273ffffffffffffffffffffffffffffffffffffffff808095169116036130da5761306c57612f65905b80156131d25761318e9061535f565b73ffffffffffffffffffffffffffffffffffffffff65ffffffffffff8060408401511642119081156131c2575b5091511691565b90506020830151164210386131bb565b50600090600090565b156131e257565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f41413934206761732076616c756573206f766572666c6f7700000000000000006044820152fd5b916000915a9381519061325382826136b3565b61325c81612a0c565b602084015261329a6effffffffffffffffffffffffffffff60808401516060850151176040850151176101008401359060e0850135171711156131db565b6132a382613775565b6132ae818584613836565b97906132df6129346132d4875173ffffffffffffffffffffffffffffffffffffffff1690565b60208801519061546c565b6133db576132ec43600052565b73ffffffffffffffffffffffffffffffffffffffff61332460a0606097015173ffffffffffffffffffffffffffffffffffffffff1690565b166133c1575b505a810360a0840135106133545760809360c092604087015260608601525a900391013501910152565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601e60408201527f41413430206f76657220766572696669636174696f6e4761734c696d6974000060608201520190565b909350816133d2929750858461455c565b9590923861332a565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601a60408201527f4141323520696e76616c6964206163636f756e74206e6f6e636500000000000060608201520190565b9290916000925a825161345b81846136b3565b61346483612a0c565b60208501526134a26effffffffffffffffffffffffffffff60808301516060840151176040840151176101008601359060e0870135171711156131db565b6134ab81613775565b6134b78186868b613ba2565b98906134e86129346134dd865173ffffffffffffffffffffffffffffffffffffffff1690565b60208701519061546c565b6135e0576134f543600052565b73ffffffffffffffffffffffffffffffffffffffff61352d60a0606096015173ffffffffffffffffffffffffffffffffffffffff1690565b166135c5575b505a840360a08601351061355f5750604085015260608401526080919060c0905a900391013501910152565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601e60448201527f41413430206f76657220766572696669636174696f6e4761734c696d697400006064820152608490fd5b909250816135d79298508686856147ef565b96909138613533565b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601a60408201527f4141323520696e76616c6964206163636f756e74206e6f6e636500000000000060608201520190565b1561365557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4141393320696e76616c6964207061796d6173746572416e64446174610000006044820152fd5b613725906136dd6136c38261256d565b73ffffffffffffffffffffffffffffffffffffffff168452565b602081013560208401526080810135604084015260a0810135606084015260c0810135608084015260e081013560c084015261010081013560e0840152610120810190611fc8565b90811561376a5761374f61124c6112468460a09461374a601461044d9998101561364e565b612b88565b73ffffffffffffffffffffffffffffffffffffffff16910152565b505060a06000910152565b60a081015173ffffffffffffffffffffffffffffffffffffffff16156137b75760c060035b60ff60408401519116606084015102016080830151019101510290565b60c0600161379a565b6137d86040929594939560608352606083019061262c565b9460208201520152565b9061044d602f60405180947f414132332072657665727465643a20000000000000000000000000000000000060208301526138268151809260208686019101612067565b810103600f8101855201836105ab565b916000926000925a936139046020835193613865855173ffffffffffffffffffffffffffffffffffffffff1690565b9561387d6138766040830183611fc8565b9084613e0d565b60a086015173ffffffffffffffffffffffffffffffffffffffff16906138a243600052565b85809373ffffffffffffffffffffffffffffffffffffffff809416159889613b3a575b60600151908601516040517f3a871cdd0000000000000000000000000000000000000000000000000000000081529788968795869390600485016137c0565b03938a1690f1829181613b1a575b50613b115750600190613923612d80565b6308c379a014613abd575b50613a50575b613941575b50505a900391565b61396b9073ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b613986610a2c82546dffffffffffffffffffffffffffff1690565b8083116139e3576139dc926dffffffffffffffffffffffffffff9103166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b3880613939565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601760408201527f41413231206469646e2774207061792070726566756e6400000000000000000060608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601660408201527f4141323320726576657274656420286f72204f4f47290000000000000000000060608201520190565b613ac5612d9e565b9081613ad1575061392e565b610f2191613adf91506137e2565b6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301612882565b95506139349050565b613b3391925060203d81116123385761232981836105ab565b9038613912565b9450613b80610a2c613b6c8c73ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b546dffffffffffffffffffffffffffff1690565b8b811115613b975750856060835b969150506138c5565b606087918d03613b8e565b90926000936000935a94613beb6020835193613bd2855173ffffffffffffffffffffffffffffffffffffffff1690565b9561387d613be36040830183611fc8565b90848c61412b565b03938a1690f1829181613ded575b50613de45750600190613c0a612d80565b6308c379a014613d8e575b50613d20575b613c29575b5050505a900391565b613c539073ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b91613c6f610a2c84546dffffffffffffffffffffffffffff1690565b90818311613cba575082547fffffffffffffffffffffffffffffffffffff0000000000000000000000000000169190036dffffffffffffffffffffffffffff16179055388080613c20565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601760448201527f41413231206469646e2774207061792070726566756e640000000000000000006064820152608490fd5b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601660408201527f4141323320726576657274656420286f72204f4f47290000000000000000000060608201520190565b613d96612d9e565b9081613da25750613c15565b8691613dae91506137e2565b90610f216040519283927f220266b60000000000000000000000000000000000000000000000000000000084526004840161289a565b9650613c1b9050565b613e0691925060203d81116123385761232981836105ab565b9038613bf9565b909180613e1957505050565b81515173ffffffffffffffffffffffffffffffffffffffff1692833b6140be57606083510151604051907f570e1a3600000000000000000000000000000000000000000000000000000000825260208280613e78878760048401612d2c565b0381600073ffffffffffffffffffffffffffffffffffffffff95867f0000000000000000000000007fc98430eaedbb6070b35b39d7987250490883481690f19182156140b1575b600092614091575b508082169586156140245716809503613fb7573b15613f4a5761124c6112467fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d93613f1193612b88565b602083810151935160a001516040805173ffffffffffffffffffffffffffffffffffffffff9485168152939091169183019190915290a3565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f4141313520696e6974436f6465206d757374206372656174652073656e64657260608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f4141313420696e6974436f6465206d7573742072657475726e2073656e64657260608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601b60408201527f4141313320696e6974436f6465206661696c6564206f72204f4f47000000000060608201520190565b6140aa91925060203d811161146a5761145b81836105ab565b9038613ec7565b6140b9612183565b613ebf565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601f60408201527f414131302073656e64657220616c726561647920636f6e73747275637465640060608201520190565b9290918161413a575b50505050565b82515173ffffffffffffffffffffffffffffffffffffffff1693843b6143e257606084510151604051907f570e1a3600000000000000000000000000000000000000000000000000000000825260208280614199888860048401612d2c565b0381600073ffffffffffffffffffffffffffffffffffffffff95867f0000000000000000000000007fc98430eaedbb6070b35b39d7987250490883481690f19182156143d5575b6000926143b5575b5080821696871561434757168096036142d9573b15614273575061124c6112467fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d9361423393612b88565b602083810151935160a001516040805173ffffffffffffffffffffffffffffffffffffffff9485168152939091169183019190915290a338808080614134565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602060448201527f4141313520696e6974436f6465206d757374206372656174652073656e6465726064820152608490fd5b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152602060408201527f4141313420696e6974436f6465206d7573742072657475726e2073656e64657260608201520190565b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601b60408201527f4141313320696e6974436f6465206661696c6564206f72204f4f47000000000060608201520190565b6143ce91925060203d811161146a5761145b81836105ab565b90386141e8565b6143dd612183565b6141e0565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601f60448201527f414131302073656e64657220616c726561647920636f6e7374727563746564006064820152608490fd5b1561444f57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4141343120746f6f206c6974746c6520766572696669636174696f6e476173006044820152fd5b919060408382031261035957825167ffffffffffffffff81116103595783019080601f83011215610359578151916144e483610639565b916144f260405193846105ab565b838352602084830101116103595760209261451291848085019101612067565b92015190565b9061044d602f60405180947f414133332072657665727465643a20000000000000000000000000000000000060208301526138268151809260208686019101612067565b93919260609460009460009380519261459b60a08a86015195614580888811614448565b015173ffffffffffffffffffffffffffffffffffffffff1690565b916145c68373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b946145e2610a2c87546dffffffffffffffffffffffffffff1690565b968588106147825773ffffffffffffffffffffffffffffffffffffffff60208a98946146588a966dffffffffffffffffffffffffffff8b6146919e03166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b015194604051998a98899788937ff465c77e000000000000000000000000000000000000000000000000000000008552600485016137c0565b0395169103f190818391849361475c575b506147555750506001906146b4612d80565b6308c379a014614733575b506146c657565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601660408201527f4141333320726576657274656420286f72204f4f47290000000000000000000060608201520190565b61473b612d9e565b908161474757506146bf565b610f2191613adf9150614518565b9450925050565b90925061477b91503d8085833e61477381836105ab565b8101906144ad565b91386146a2565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601e60408201527f41413331207061796d6173746572206465706f73697420746f6f206c6f77000060608201520190565b91949293909360609560009560009382519061481660a08b84015193614580848611614448565b936148418573ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b61485c610a2c82546dffffffffffffffffffffffffffff1690565b8781106149b7579273ffffffffffffffffffffffffffffffffffffffff60208a989693946146588a966dffffffffffffffffffffffffffff8d6148d69e9c9a03166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b0395169103f1908183918493614999575b506149915750506001906148f9612d80565b6308c379a014614972575b5061490c5750565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601660448201527f4141333320726576657274656420286f72204f4f4729000000000000000000006064820152608490fd5b61497a612d9e565b90816149865750614904565b613dae925050614518565b955093505050565b9092506149b091503d8085833e61477381836105ab565b91386148e7565b610f218a6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601e60408201527f41413331207061796d6173746572206465706f73697420746f6f206c6f77000060608201520190565b60031115614a2f57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b929190614a7c6040916002865260606020870152606086019061208a565b930152565b939291906003811015614a2f57604091614a7c91865260606020870152606086019061208a565b9061044d603660405180947f4141353020706f73744f702072657665727465643a20000000000000000000006020830152614aec8151809260208686019101612067565b81010360168101855201836105ab565b929190925a93600091805191614b1183615318565b9260a0810195614b35875173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff93908481169081614ca457505050614b76825173ffffffffffffffffffffffffffffffffffffffff1690565b985b5a90030193840297604084019089825110614c37577f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f94614bc26020928c614c329551039061553a565b015194896020614c04614be9865173ffffffffffffffffffffffffffffffffffffffff1690565b9a5173ffffffffffffffffffffffffffffffffffffffff1690565b9401519785604051968796169a16988590949392606092608083019683521515602083015260408201520152565b0390a4565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f414135312070726566756e642062656c6f772061637475616c476173436f737460608201520190565b9a918051614cb4575b5050614b78565b6060850151600099509091803b15614ddb579189918983614d07956040518097819682957fa9a234090000000000000000000000000000000000000000000000000000000084528c029060048401614a5e565b0393f19081614dc8575b50614dc3576001614d20612d80565b6308c379a014614da4575b614d37575b3880614cad565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b614dac612d9e565b80614db75750614d2b565b613adf610f2191614aa8565b614d30565b80610f48614dd59261057b565b38614d11565b8980fd5b9392915a90600092805190614df382615318565b9360a0830196614e17885173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff95908681169081614f0d57505050614e58845173ffffffffffffffffffffffffffffffffffffffff1690565b915b5a9003019485029860408301908a825110614ea757507f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f949392614bc2614c32938c60209451039061553a565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602060448201527f414135312070726566756e642062656c6f772061637475616c476173436f73746064820152608490fd5b93918051614f1d575b5050614e5a565b606087015160009a509091803b1561504357918a918a83614f70956040518097819682957fa9a234090000000000000000000000000000000000000000000000000000000084528c029060048401614a5e565b0393f19081615030575b5061502b576001614f89612d80565b6308c379a01461500e575b614fa0575b3880614f16565b610f218b6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b615016612d9e565b806150215750614f94565b613dae8d91614aa8565b614f99565b80610f4861503d9261057b565b38614f7a565b8a80fd5b909392915a9480519161505983615318565b9260a081019561507d875173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff938185169182615165575050506150bd825173ffffffffffffffffffffffffffffffffffffffff1690565b985b5a90030193840297604084019089825110614c37577f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f946151096020928c614c329551039061553a565b61511288614a25565b015194896020615139614be9865173ffffffffffffffffffffffffffffffffffffffff1690565b940151604080519182529815602082015297880152606087015290821695909116939081906080820190565b9a918151615175575b50506150bf565b8784026151818a614a25565b60028a1461520c576060860151823b15610359576151d493600080948d604051978896879586937fa9a2340900000000000000000000000000000000000000000000000000000000855260048501614a81565b0393f180156151ff575b6151ec575b505b388061516e565b80610f486151f99261057b565b386151e3565b615207612183565b6151de565b6060860151823b156103595761525793600080948d604051978896879586937fa9a2340900000000000000000000000000000000000000000000000000000000855260048501614a81565b0393f19081615305575b50615300576001615270612d80565b6308c379a0146152ed575b156151e5576040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b6152f5612d9e565b80614db7575061527b565b6151e5565b80610f486153129261057b565b38615261565b60e060c082015191015180821461533c57480180821015615337575090565b905090565b5090565b6040519061534d8261058f565b60006040838281528260208201520152565b615367615340565b5065ffffffffffff808260a01c1680156153b3575b604051926153898461058f565b73ffffffffffffffffffffffffffffffffffffffff8116845260d01c602084015216604082015290565b508061537c565b6153cf6153d5916153c9615340565b5061535f565b9161535f565b9073ffffffffffffffffffffffffffffffffffffffff9182825116928315615461575b65ffffffffffff928391826040816020850151169301511693836040816020840151169201511690808410615459575b50808511615451575b506040519561543f8761058f565b16855216602084015216604082015290565b935038615431565b925038615428565b8151811693506153f8565b73ffffffffffffffffffffffffffffffffffffffff16600052600160205267ffffffffffffffff6154c88260401c60406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b918254926154d584612491565b9055161490565b9073ffffffffffffffffffffffffffffffffffffffff6154fa612b50565b9216600052600060205263ffffffff600160406000206dffffffffffffffffffffffffffff815460781c1685520154166020830152565b61044d3361562b565b73ffffffffffffffffffffffffffffffffffffffff16600052600060205260406000206dffffffffffffffffffffffffffff8082541692830180931161561e575b8083116155c05761044d92166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f6465706f736974206f766572666c6f77000000000000000000000000000000006044820152fd5b615626612190565b61557b565b73ffffffffffffffffffffffffffffffffffffffff9061564b348261553a565b168060005260006020527f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c460206dffffffffffffffffffffffffffff60406000205416604051908152a2565b1561569e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6d757374207370656369667920756e7374616b652064656c61790000000000006044820152fd5b1561570357565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f63616e6e6f7420646563726561736520756e7374616b652074696d65000000006044820152fd5b1561576857565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6e6f207374616b652073706563696669656400000000000000000000000000006044820152fd5b156157cd57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f7374616b65206f766572666c6f770000000000000000000000000000000000006044820152fd5b9065ffffffffffff6080600161044d9461588b6dffffffffffffffffffffffffffff86511682906dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b602085015115156eff000000000000000000000000000082549160701b16807fffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffff83161783557fffffff000000000000000000000000000000ffffffffffffffffffffffffffff7cffffffffffffffffffffffffffff000000000000000000000000000000604089015160781b16921617178155019263ffffffff6060820151167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000008554161784550151167fffffffffffffffffffffffffffffffffffffffffffff000000000000ffffffff69ffffffffffff0000000083549260201b169116179055565b1561599657565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f616c726561647920756e7374616b696e670000000000000000000000000000006044820152fd5b91909165ffffffffffff808094169116019182116121cd57565b15615a1557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4e6f207374616b6520746f2077697468647261770000000000000000000000006044820152fd5b15615a7a57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6d7573742063616c6c20756e6c6f636b5374616b6528292066697273740000006044820152fd5b15615adf57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5374616b65207769746864726177616c206973206e6f742064756500000000006044820152fd5b15615b4457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f6661696c656420746f207769746864726177207374616b6500000000000000006044820152fd5b15615ba957565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6661696c656420746f20776974686472617700000000000000000000000000006044820152fd5b816040519182372090565b9060009283809360208451940192f190565b3d610800808211615c4b575b50604051906020818301016040528082526000602083013e90565b905038615c3056fea2646970667358221220a706d8b02d7086d80e9330811f5af84b2614abdc5e9a1f2260126070a31d7cee64736f6c634300081100336080604052600436106100f35760003560e01c80634d2301cc1161008a578063a8b0574e11610059578063a8b0574e1461025a578063bce38bd714610275578063c3077fa914610288578063ee82ac5e1461029b57600080fd5b80634d2301cc146101ec57806372425d9d1461022157806382ad56cb1461023457806386d516e81461024757600080fd5b80633408e470116100c65780633408e47014610191578063399542e9146101a45780633e64a696146101c657806342cbb15c146101d957600080fd5b80630f28c97d146100f8578063174dea711461011a578063252dba421461013a57806327e86d6e1461015b575b600080fd5b34801561010457600080fd5b50425b6040519081526020015b60405180910390f35b61012d610128366004610a85565b6102ba565b6040516101119190610bbe565b61014d610148366004610a85565b6104ef565b604051610111929190610bd8565b34801561016757600080fd5b50437fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0140610107565b34801561019d57600080fd5b5046610107565b6101b76101b2366004610c60565b610690565b60405161011193929190610cba565b3480156101d257600080fd5b5048610107565b3480156101e557600080fd5b5043610107565b3480156101f857600080fd5b50610107610207366004610ce2565b73ffffffffffffffffffffffffffffffffffffffff163190565b34801561022d57600080fd5b5044610107565b61012d610242366004610a85565b6106ab565b34801561025357600080fd5b5045610107565b34801561026657600080fd5b50604051418152602001610111565b61012d610283366004610c60565b61085a565b6101b7610296366004610a85565b610a1a565b3480156102a757600080fd5b506101076102b6366004610d18565b4090565b60606000828067ffffffffffffffff8111156102d8576102d8610d31565b60405190808252806020026020018201604052801561031e57816020015b6040805180820190915260008152606060208201528152602001906001900390816102f65790505b5092503660005b8281101561047757600085828151811061034157610341610d60565b6020026020010151905087878381811061035d5761035d610d60565b905060200281019061036f9190610d8f565b6040810135958601959093506103886020850185610ce2565b73ffffffffffffffffffffffffffffffffffffffff16816103ac6060870187610dcd565b6040516103ba929190610e32565b60006040518083038185875af1925050503d80600081146103f7576040519150601f19603f3d011682016040523d82523d6000602084013e6103fc565b606091505b50602080850191909152901515808452908501351761046d577f08c379a000000000000000000000000000000000000000000000000000000000600052602060045260176024527f4d756c746963616c6c333a2063616c6c206661696c656400000000000000000060445260846000fd5b5050600101610325565b508234146104e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4d756c746963616c6c333a2076616c7565206d69736d6174636800000000000060448201526064015b60405180910390fd5b50505092915050565b436060828067ffffffffffffffff81111561050c5761050c610d31565b60405190808252806020026020018201604052801561053f57816020015b606081526020019060019003908161052a5790505b5091503660005b8281101561068657600087878381811061056257610562610d60565b90506020028101906105749190610e42565b92506105836020840184610ce2565b73ffffffffffffffffffffffffffffffffffffffff166105a66020850185610dcd565b6040516105b4929190610e32565b6000604051808303816000865af19150503d80600081146105f1576040519150601f19603f3d011682016040523d82523d6000602084013e6105f6565b606091505b5086848151811061060957610609610d60565b602090810291909101015290508061067d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4d756c746963616c6c333a2063616c6c206661696c656400000000000000000060448201526064016104dd565b50600101610546565b5050509250929050565b43804060606106a086868661085a565b905093509350939050565b6060818067ffffffffffffffff8111156106c7576106c7610d31565b60405190808252806020026020018201604052801561070d57816020015b6040805180820190915260008152606060208201528152602001906001900390816106e55790505b5091503660005b828110156104e657600084828151811061073057610730610d60565b6020026020010151905086868381811061074c5761074c610d60565b905060200281019061075e9190610e76565b925061076d6020840184610ce2565b73ffffffffffffffffffffffffffffffffffffffff166107906040850185610dcd565b60405161079e929190610e32565b6000604051808303816000865af19150503d80600081146107db576040519150601f19603f3d011682016040523d82523d6000602084013e6107e0565b606091505b506020808401919091529015158083529084013517610851577f08c379a000000000000000000000000000000000000000000000000000000000600052602060045260176024527f4d756c746963616c6c333a2063616c6c206661696c656400000000000000000060445260646000fd5b50600101610714565b6060818067ffffffffffffffff81111561087657610876610d31565b6040519080825280602002602001820160405280156108bc57816020015b6040805180820190915260008152606060208201528152602001906001900390816108945790505b5091503660005b82811015610a105760008482815181106108df576108df610d60565b602002602001015190508686838181106108fb576108fb610d60565b905060200281019061090d9190610e42565b925061091c6020840184610ce2565b73ffffffffffffffffffffffffffffffffffffffff1661093f6020850185610dcd565b60405161094d929190610e32565b6000604051808303816000865af19150503d806000811461098a576040519150601f19603f3d011682016040523d82523d6000602084013e61098f565b606091505b506020830152151581528715610a07578051610a07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4d756c746963616c6c333a2063616c6c206661696c656400000000000000000060448201526064016104dd565b506001016108c3565b5050509392505050565b6000806060610a2b60018686610690565b919790965090945092505050565b60008083601f840112610a4b57600080fd5b50813567ffffffffffffffff811115610a6357600080fd5b6020830191508360208260051b8501011115610a7e57600080fd5b9250929050565b60008060208385031215610a9857600080fd5b823567ffffffffffffffff811115610aaf57600080fd5b610abb85828601610a39565b90969095509350505050565b6000815180845260005b81811015610aed57602081850181015186830182015201610ad1565b81811115610aff576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600082825180855260208086019550808260051b84010181860160005b84811015610bb1578583037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001895281518051151584528401516040858501819052610b9d81860183610ac7565b9a86019a9450505090830190600101610b4f565b5090979650505050505050565b602081526000610bd16020830184610b32565b9392505050565b600060408201848352602060408185015281855180845260608601915060608160051b870101935082870160005b82811015610c52577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0888703018452610c40868351610ac7565b95509284019290840190600101610c06565b509398975050505050505050565b600080600060408486031215610c7557600080fd5b83358015158114610c8557600080fd5b9250602084013567ffffffffffffffff811115610ca157600080fd5b610cad86828701610a39565b9497909650939450505050565b838152826020820152606060408201526000610cd96060830184610b32565b95945050505050565b600060208284031215610cf457600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610bd157600080fd5b600060208284031215610d2a57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81833603018112610dc357600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112610e0257600080fd5b83018035915067ffffffffffffffff821115610e1d57600080fd5b602001915036819003821315610a7e57600080fd5b8183823760009101908152919050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112610dc357600080fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112610dc357600080fdfea2646970667358221220bb2b5c71a328032f97c676ae39a1ec2148d3e5d6f73d95e9b17910152d61f16264736f6c634300080c0033608060405234801561001057600080fd5b50600436106100a5576000357c010000000000000000000000000000000000000000000000000000000090048063a41e7d5111610078578063a41e7d51146101d4578063aabbb8ca1461020a578063b705676514610236578063f712f3e814610280576100a5565b806329965a1d146100aa5780633d584063146100e25780635df8122f1461012457806365ba36c114610152575b600080fd5b6100e0600480360360608110156100c057600080fd5b50600160a060020a038135811691602081013591604090910135166102b6565b005b610108600480360360208110156100f857600080fd5b5035600160a060020a0316610570565b60408051600160a060020a039092168252519081900360200190f35b6100e06004803603604081101561013a57600080fd5b50600160a060020a03813581169160200135166105bc565b6101c26004803603602081101561016857600080fd5b81019060208101813564010000000081111561018357600080fd5b82018360208201111561019557600080fd5b803590602001918460018302840111640100000000831117156101b757600080fd5b5090925090506106b3565b60408051918252519081900360200190f35b6100e0600480360360408110156101ea57600080fd5b508035600160a060020a03169060200135600160e060020a0319166106ee565b6101086004803603604081101561022057600080fd5b50600160a060020a038135169060200135610778565b61026c6004803603604081101561024c57600080fd5b508035600160a060020a03169060200135600160e060020a0319166107ef565b604080519115158252519081900360200190f35b61026c6004803603604081101561029657600080fd5b508035600160a060020a03169060200135600160e060020a0319166108aa565b6000600160a060020a038416156102cd57836102cf565b335b9050336102db82610570565b600160a060020a031614610339576040805160e560020a62461bcd02815260206004820152600f60248201527f4e6f7420746865206d616e616765720000000000000000000000000000000000604482015290519081900360640190fd5b6103428361092a565b15610397576040805160e560020a62461bcd02815260206004820152601a60248201527f4d757374206e6f7420626520616e204552433136352068617368000000000000604482015290519081900360640190fd5b600160a060020a038216158015906103b85750600160a060020a0382163314155b156104ff5760405160200180807f455243313832305f4143434550545f4d4147494300000000000000000000000081525060140190506040516020818303038152906040528051906020012082600160a060020a031663249cb3fa85846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182600160a060020a0316600160a060020a031681526020019250505060206040518083038186803b15801561047e57600080fd5b505afa158015610492573d6000803e3d6000fd5b505050506040513d60208110156104a857600080fd5b5051146104ff576040805160e560020a62461bcd02815260206004820181905260248201527f446f6573206e6f7420696d706c656d656e742074686520696e74657266616365604482015290519081900360640190fd5b600160a060020a03818116600081815260208181526040808320888452909152808220805473ffffffffffffffffffffffffffffffffffffffff19169487169485179055518692917f93baa6efbd2244243bfee6ce4cfdd1d04fc4c0e9a786abd3a41313bd352db15391a450505050565b600160a060020a03818116600090815260016020526040812054909116151561059a5750806105b7565b50600160a060020a03808216600090815260016020526040902054165b919050565b336105c683610570565b600160a060020a031614610624576040805160e560020a62461bcd02815260206004820152600f60248201527f4e6f7420746865206d616e616765720000000000000000000000000000000000604482015290519081900360640190fd5b81600160a060020a031681600160a060020a0316146106435780610646565b60005b600160a060020a03838116600081815260016020526040808220805473ffffffffffffffffffffffffffffffffffffffff19169585169590951790945592519184169290917f605c2dbf762e5f7d60a546d42e7205dcb1b011ebc62a61736a57c9089d3a43509190a35050565b600082826040516020018083838082843780830192505050925050506040516020818303038152906040528051906020012090505b92915050565b6106f882826107ef565b610703576000610705565b815b600160a060020a03928316600081815260208181526040808320600160e060020a031996909616808452958252808320805473ffffffffffffffffffffffffffffffffffffffff19169590971694909417909555908152600284528181209281529190925220805460ff19166001179055565b600080600160a060020a038416156107905783610792565b335b905061079d8361092a565b156107c357826107ad82826108aa565b6107b85760006107ba565b815b925050506106e8565b600160a060020a0390811660009081526020818152604080832086845290915290205416905092915050565b6000808061081d857f01ffc9a70000000000000000000000000000000000000000000000000000000061094c565b909250905081158061082d575080155b1561083d576000925050506106e8565b61084f85600160e060020a031961094c565b909250905081158061086057508015155b15610870576000925050506106e8565b61087a858561094c565b909250905060018214801561088f5750806001145b1561089f576001925050506106e8565b506000949350505050565b600160a060020a0382166000908152600260209081526040808320600160e060020a03198516845290915281205460ff1615156108f2576108eb83836107ef565b90506106e8565b50600160a060020a03808316600081815260208181526040808320600160e060020a0319871684529091529020549091161492915050565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff161590565b6040517f01ffc9a7000000000000000000000000000000000000000000000000000000008082526004820183905260009182919060208160248189617530fa90519096909550935050505056fea165627a7a72305820377f4a2d4301ede9949f163f319021a6e9c687c292a5e2b2c4734c126b524e6c00293373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500a2646970667358221220d2199a37a9a2df279e302b5f484191637d151b02de2ae90366d21fdf1153bfe864736f6c63430008180033", } // AllocPredeploysABI is the input ABI used to generate the binding from. diff --git a/contracts/bindings/staking.go b/contracts/bindings/staking.go index 97692b581..79d54c4d1 100644 --- a/contracts/bindings/staking.go +++ b/contracts/bindings/staking.go @@ -31,8 +31,8 @@ var ( // StakingMetaData contains all meta data concerning the Staking contract. var StakingMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"MinDelegation\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MinDeposit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"allowValidators\",\"inputs\":[{\"name\":\"validators\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"createValidator\",\"inputs\":[{\"name\":\"pubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"createValidator\",\"inputs\":[{\"name\":\"x\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"y\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"delegate\",\"inputs\":[{\"name\":\"delegator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"validator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"disableAllowlist\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"disallowValidators\",\"inputs\":[{\"name\":\"validators\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"eip712Domain\",\"inputs\":[],\"outputs\":[{\"name\":\"fields\",\"type\":\"bytes1\",\"internalType\":\"bytes1\"},{\"name\":\"name\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"version\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"verifyingContract\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"extensions\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"enableAllowlist\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getValidatorPubkeyDigest\",\"inputs\":[{\"name\":\"x\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"y\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"owner_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"isAllowlistEnabled_\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initializeV1\",\"inputs\":[{\"name\":\"owner_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"isAllowlistEnabled_\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initializeV2\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isAllowedValidator\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isAllowlistEnabled\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"AllowlistDisabled\",\"inputs\":[],\"anonymous\":false},{\"type\":\"event\",\"name\":\"AllowlistEnabled\",\"inputs\":[],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CreateValidator\",\"inputs\":[{\"name\":\"validator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"pubkey\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"deposit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Delegate\",\"inputs\":[{\"name\":\"delegator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"validator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"EIP712DomainChanged\",\"inputs\":[],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorAllowed\",\"inputs\":[{\"name\":\"validator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorDisallowed\",\"inputs\":[{\"name\":\"validator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OwnableInvalidOwner\",\"inputs\":[{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"OwnableUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]}]", - Bin: "0x608060405234801561001057600080fd5b5061001961001e565b6100d0565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161561006e5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100cd5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b611e22806100df6000396000f3fe6080604052600436106101145760003560e01c806384b0196e116100a0578063c6a2aac811610064578063c6a2aac814610306578063cf8e629a1461031b578063d146fd1b14610330578063eb4bd8441461034a578063f2fde38b1461035d57600080fd5b806384b0196e146102515780638ab65686146102795780638da5cb5b1461028c5780638f38fae8146102d3578063a5a470ad146102f357600080fd5b8063400ada75116100e7578063400ada75146101ab57806359bcddde146101cb5780635cd8a76b146101e7578063715018a6146101fc57806384768b7a1461021157600080fd5b8063117407e31461011957806311bcd8301461013b578063296192f41461016b5780633f0b1edf1461018b575b600080fd5b34801561012557600080fd5b50610139610134366004611817565b61037d565b005b34801561014757600080fd5b5061015868056bc75e2d6310000081565b6040519081526020015b60405180910390f35b34801561017757600080fd5b5061015861018636600461188c565b61044d565b34801561019757600080fd5b506101396101a6366004611817565b6104b3565b3480156101b757600080fd5b506101396101c63660046118ca565b61057f565b3480156101d757600080fd5b50610158670de0b6b3a764000081565b3480156101f357600080fd5b506101396106ce565b34801561020857600080fd5b506101396107d1565b34801561021d57600080fd5b5061024161022c366004611906565b60016020526000908152604090205460ff1681565b6040519015158152602001610162565b34801561025d57600080fd5b506102666107e5565b6040516101629796959493929190611967565b610139610287366004611a00565b610896565b34801561029857600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546040516001600160a01b039091168152602001610162565b3480156102df57600080fd5b506101396102ee3660046118ca565b610985565b610139610301366004611a7c565b610a35565b34801561031257600080fd5b50610139610b5b565b34801561032757600080fd5b50610139610b99565b34801561033c57600080fd5b506000546102419060ff1681565b610139610358366004611abe565b610bd4565b34801561036957600080fd5b50610139610378366004611906565b610d61565b610385610d9f565b60005b818110156104485760018060008585858181106103a7576103a7611b11565b90506020020160208101906103bc9190611906565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558282828181106103f6576103f6611b11565b905060200201602081019061040b9190611906565b6001600160a01b03167fc6bdfc1f9b9f1f30ad26b86a7c623e58400512467a50e0c80439bfdaf3a2de9860405160405180910390a2600101610388565b505050565b604080517fc9a51567e61a6d1a243a60e57bf4560e7e543694b79349ce2cba3a14fe21b0426020820152908101839052606081018290526000906104aa906080015b60405160208183030381529060405280519060200120610dfa565b90505b92915050565b6104bb610d9f565b60005b81811015610448576000600160008585858181106104de576104de611b11565b90506020020160208101906104f39190611906565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905582828281811061052d5761052d611b11565b90506020020160208101906105429190611906565b6001600160a01b03167f3df1f5fcca9e1ece84ca685a63062905d8fe97ddb23246224be416f2d3c8613f60405160405180910390a26001016104be565b600080516020611dcd8339815191528054600160401b810460ff16159067ffffffffffffffff166000811580156105b35750825b905060008267ffffffffffffffff1660011480156105d05750303b155b9050811580156105de575080155b156105fc5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561062657845460ff60401b1916600160401b1785555b61062f87610e27565b610671604051806040016040528060078152602001665374616b696e6760c81b815250604051806040016040528060018152602001603160f81b815250610e38565b6000805460ff191687151517905583156106c557845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b600080516020611dcd833981519152805460029190600160401b900460ff16806107065750805467ffffffffffffffff808416911610155b156107245760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff191667ffffffffffffffff831617600160401b17815560408051808201825260078152665374616b696e6760c81b602080830191909152825180840190935260018352603160f81b9083015261078591610e38565b805460ff60401b1916815560405167ffffffffffffffff831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050565b6107d9610d9f565b6107e36000610e4e565b565b60006060808280808381600080516020611dad833981519152805490915015801561081257506001810154155b61085b5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b60448201526064015b60405180910390fd5b610863610ebf565b61086b610f82565b60408051600080825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b60005460ff1615806108c057506001600160a01b03811660009081526001602052604090205460ff165b61090c5760405162461bcd60e51b815260206004820152601860248201527f5374616b696e673a206e6f7420616c6c6f7765642076616c00000000000000006044820152606401610852565b670de0b6b3a76400003410156109345760405162461bcd60e51b815260040161085290611b3d565b806001600160a01b0316826001600160a01b03167f510b11bb3f3c799b11307c01ab7db0d335683ef5b2da98f7697de744f465eacc3460405161097991815260200190565b60405180910390a35050565b600080516020611dcd8339815191528054600160401b810460ff16159067ffffffffffffffff166000811580156109b95750825b905060008267ffffffffffffffff1660011480156109d65750303b155b9050811580156109e4575080155b15610a025760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610a2c57845460ff60401b1916600160401b1785555b61067187610e27565b60005460ff161580610a5657503360009081526001602052604090205460ff165b610a995760405162461bcd60e51b815260206004820152601460248201527314dd185ada5b99ce881b9bdd08185b1b1bddd95960621b6044820152606401610852565b68056bc75e2d63100000341015610ac25760405162461bcd60e51b815260040161085290611b3d565b610acc8282610fc1565b610b125760405162461bcd60e51b81526020600482015260176024820152765374616b696e673a20696e76616c6964207075626b657960481b6044820152606401610852565b336001600160a01b03167fc7abef7b73f049da6a9bc2349ba5066a39e316eabc9f671b6f9406aa9490a453838334604051610b4f93929190611b74565b60405180910390a25050565b610b63610d9f565b6000805460ff191660011781556040517f8a943acd5f4e6d3df7565a4a08a93f6b04cc31bb6c01ca4aef7abd6baf455ec39190a1565b610ba1610d9f565b6000805460ff191681556040517f2d35c8d348a345fd7b3b03b7cfcf7ad0b60c2d46742d5ca536342e4185becb079190a1565b60005460ff161580610bf557503360009081526001602052604090205460ff165b610c385760405162461bcd60e51b815260206004820152601460248201527314dd185ada5b99ce881b9bdd08185b1b1bddd95960621b6044820152606401610852565b68056bc75e2d63100000341015610c615760405162461bcd60e51b815260040161085290611b3d565b610c6b8484611115565b610cb15760405162461bcd60e51b81526020600482015260176024820152765374616b696e673a20696e76616c6964207075626b657960481b6044820152606401610852565b610cbd8484848461112b565b610d095760405162461bcd60e51b815260206004820152601a60248201527f5374616b696e673a20696e76616c6964207369676e61747572650000000000006044820152606401610852565b6000610d1585856111e3565b9050336001600160a01b03167fc7abef7b73f049da6a9bc2349ba5066a39e316eabc9f671b6f9406aa9490a4538234604051610d52929190611bad565b60405180910390a25050505050565b610d69610d9f565b6001600160a01b038116610d9357604051631e4fbdf760e01b815260006004820152602401610852565b610d9c81610e4e565b50565b33610dd17f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146107e35760405163118cdaa760e01b8152336004820152602401610852565b60006104ad610e07611230565b8360405161190160f01b8152600281019290925260228201526042902090565b610e2f61123f565b610d9c81611276565b610e4061123f565b610e4a828261127e565b5050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1028054606091600080516020611dad83398151915291610efe90611bcf565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2a90611bcf565b8015610f775780601f10610f4c57610100808354040283529160200191610f77565b820191906000526020600020905b815481529060010190602001808311610f5a57829003601f168201915b505050505091505090565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1038054606091600080516020611dad83398151915291610efe90611bcf565b6000602182146110135760405162461bcd60e51b815260206004820152601e60248201527f5374616b696e673a20696e76616c6964207075626b6579206c656e67746800006044820152606401610852565b8282600081811061102657611026611b11565b9050013560f81c60f81b6001600160f81b031916600260f81b148061107457508282600081811061105957611059611b11565b9050013560f81c60f81b6001600160f81b031916600360f81b145b6110c05760405162461bcd60e51b815260206004820152601e60248201527f5374616b696e673a20696e76616c6964207075626b65792070726566697800006044820152606401610852565b600183013560006110f5858583816110da576110da611b11565b919091013560f81c905083600060076401000003d0196112df565b905061110c8282600060076401000003d019611411565b95945050505050565b60006104aa83838360076401000003d019611411565b604080517fc9a51567e61a6d1a243a60e57bf4560e7e543694b79349ce2cba3a14fe21b04260208201529081018590526060810184905260009081906111739060800161048f565b905060006111b78286868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506114ca92505050565b5050905060006111c78888611517565b6001600160a01b03928316921691909114979650505050505050565b606060006111f5600184166002611c1f565b6040805160f89290921b6001600160f81b03191660208301526021808301969096528051808303909601865260419091019052509192915050565b600061123a61154d565b905090565b600080516020611dcd83398151915254600160401b900460ff166107e357604051631afcd79f60e31b815260040160405180910390fd5b610d6961123f565b61128661123f565b600080516020611dad8339815191527fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1026112c08482611c88565b50600381016112cf8382611c88565b5060008082556001909101555050565b60008560ff16600214806112f657508560ff166003145b61135c5760405162461bcd60e51b815260206004820152603160248201527f456c6c697074696343757276653a696e6e76616c696420636f6d7072657373656044820152700c8408a8640e0ded2dce840e0e4caccd2f607b1b6064820152608401610852565b6000828061136c5761136c611d48565b838061137a5761137a611d48565b85858061138957611389611d48565b888a0908848061139b5761139b611d48565b85806113a9576113a9611d48565b898a0989090890506113d28160046113c2866001611d5e565b6113cc9190611d71565b856115c1565b9050600060026113e560ff8a1684611d5e565b6113ef9190611d85565b15611403576113fe8285611d99565b611405565b815b98975050505050505050565b60008515806114205750818610155b80611429575084155b806114345750818510155b156114415750600061110c565b6000828061145157611451611d48565b86870990506000838061146657611466611d48565b88858061147557611475611d48565b8a8b0909905085156114a557838061148f5761148f611d48565b848061149d5761149d611d48565b878a09820890505b84156114bf5783806114b9576114b9611d48565b85820890505b149695505050505050565b600080600083516041036115045760208401516040850151606086015160001a6114f68882858561169a565b955095509550505050611510565b50508151600091506002905b9250925092565b60408051818152606081018252600091829190602082018180368337505050602081019485526040810193909352505051902090565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611578611769565b6115806117d3565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6000816000036116135760405162461bcd60e51b815260206004820152601e60248201527f456c6c697074696343757276653a206d6f64756c7573206973207a65726f00006044820152606401610852565b8360000361162357506000611693565b8260000361163357506001611693565b6001600160ff1b5b801561168f57838186161515870a85848509099150836002820486161515870a85848509099150836004820486161515870a85848509099150836008820486161515870a858485090991506010900461163b565b5090505b9392505050565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156116d5575060009150600390508261175f565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015611729573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166117555750600092506001915082905061175f565b9250600091508190505b9450945094915050565b6000600080516020611dad83398151915281611783610ebf565b80519091501561179b57805160209091012092915050565b815480156117aa579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b6000600080516020611dad833981519152816117ed610f82565b80519091501561180557805160209091012092915050565b600182015480156117aa579392505050565b6000806020838503121561182a57600080fd5b823567ffffffffffffffff8082111561184257600080fd5b818501915085601f83011261185657600080fd5b81358181111561186557600080fd5b8660208260051b850101111561187a57600080fd5b60209290920196919550909350505050565b6000806040838503121561189f57600080fd5b50508035926020909101359150565b80356001600160a01b03811681146118c557600080fd5b919050565b600080604083850312156118dd57600080fd5b6118e6836118ae565b9150602083013580151581146118fb57600080fd5b809150509250929050565b60006020828403121561191857600080fd5b6104aa826118ae565b6000815180845260005b818110156119475760208185018101518683018201520161192b565b506000602082860101526020601f19601f83011685010191505092915050565b60ff60f81b881681526000602060e0602084015261198860e084018a611921565b838103604085015261199a818a611921565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b818110156119ee578351835292840192918401916001016119d2565b50909c9b505050505050505050505050565b60008060408385031215611a1357600080fd5b611a1c836118ae565b9150611a2a602084016118ae565b90509250929050565b60008083601f840112611a4557600080fd5b50813567ffffffffffffffff811115611a5d57600080fd5b602083019150836020828501011115611a7557600080fd5b9250929050565b60008060208385031215611a8f57600080fd5b823567ffffffffffffffff811115611aa657600080fd5b611ab285828601611a33565b90969095509350505050565b60008060008060608587031215611ad457600080fd5b8435935060208501359250604085013567ffffffffffffffff811115611af957600080fd5b611b0587828801611a33565b95989497509550505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6020808252601d908201527f5374616b696e673a20696e73756666696369656e74206465706f736974000000604082015260600190565b604081528260408201528284606083013760006060848301015260006060601f19601f8601168301019050826020830152949350505050565b604081526000611bc06040830185611921565b90508260208301529392505050565b600181811c90821680611be357607f821691505b602082108103611c0357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60ff81811683821601908111156104ad576104ad611c09565b601f821115610448576000816000526020600020601f850160051c81016020861015611c615750805b601f850160051c820191505b81811015611c8057828155600101611c6d565b505050505050565b815167ffffffffffffffff811115611ca257611ca2611b27565b611cb681611cb08454611bcf565b84611c38565b602080601f831160018114611ceb5760008415611cd35750858301515b600019600386901b1c1916600185901b178555611c80565b600085815260208120601f198616915b82811015611d1a57888601518255948401946001909101908401611cfb565b5085821015611d385787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601260045260246000fd5b808201808211156104ad576104ad611c09565b600082611d8057611d80611d48565b500490565b600082611d9457611d94611d48565b500690565b818103818111156104ad576104ad611c0956fea16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a26469706673582212209ec1de4b1ad9f96937cdc63dd5d0c5e8f62af7eef29a7e85ce59896560b0f83264736f6c63430008180033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"MinDelegation\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MinDeposit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"allowValidators\",\"inputs\":[{\"name\":\"validators\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"createValidator\",\"inputs\":[{\"name\":\"pubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"createValidator\",\"inputs\":[{\"name\":\"x\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"y\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"delegate\",\"inputs\":[{\"name\":\"validator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"delegateFor\",\"inputs\":[{\"name\":\"delegator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"validator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"disableAllowlist\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"disallowValidators\",\"inputs\":[{\"name\":\"validators\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"eip712Domain\",\"inputs\":[],\"outputs\":[{\"name\":\"fields\",\"type\":\"bytes1\",\"internalType\":\"bytes1\"},{\"name\":\"name\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"version\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"verifyingContract\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"extensions\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"enableAllowlist\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getValidatorPubkeyDigest\",\"inputs\":[{\"name\":\"x\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"y\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"owner_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"isAllowlistEnabled_\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initializeV1\",\"inputs\":[{\"name\":\"owner_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"isAllowlistEnabled_\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initializeV2\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isAllowedValidator\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isAllowlistEnabled\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"AllowlistDisabled\",\"inputs\":[],\"anonymous\":false},{\"type\":\"event\",\"name\":\"AllowlistEnabled\",\"inputs\":[],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CreateValidator\",\"inputs\":[{\"name\":\"validator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"pubkey\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"deposit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Delegate\",\"inputs\":[{\"name\":\"delegator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"validator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"EIP712DomainChanged\",\"inputs\":[],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorAllowed\",\"inputs\":[{\"name\":\"validator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorDisallowed\",\"inputs\":[{\"name\":\"validator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OwnableInvalidOwner\",\"inputs\":[{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"OwnableUnauthorizedAccount\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]}]", + Bin: "0x608060405234801561001057600080fd5b5061001961001e565b6100d0565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161561006e5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100cd5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b611f17806100df6000396000f3fe60806040526004361061011f5760003560e01c806384768b7a116100a0578063c6a2aac811610064578063c6a2aac814610324578063cf8e629a14610339578063d146fd1b1461034e578063eb4bd84414610368578063f2fde38b1461037b57600080fd5b806384768b7a1461024257806384b0196e146102825780638da5cb5b146102aa5780638f38fae8146102f1578063a5a470ad1461031157600080fd5b806359bcddde116100e757806359bcddde146101d65780635c19a95c146101f25780635cd8a76b14610205578063715018a61461021a57806378fcbe5b1461022f57600080fd5b8063117407e31461012457806311bcd83014610146578063296192f4146101765780633f0b1edf14610196578063400ada75146101b6575b600080fd5b34801561013057600080fd5b5061014461013f36600461190c565b61039b565b005b34801561015257600080fd5b5061016368056bc75e2d6310000081565b6040519081526020015b60405180910390f35b34801561018257600080fd5b50610163610191366004611981565b61046b565b3480156101a257600080fd5b506101446101b136600461190c565b6104d1565b3480156101c257600080fd5b506101446101d13660046119bf565b61059d565b3480156101e257600080fd5b50610163670de0b6b3a764000081565b6101446102003660046119fb565b6106ec565b34801561021157600080fd5b506101446107cd565b34801561022657600080fd5b506101446108d0565b61014461023d366004611a16565b6108e4565b34801561024e57600080fd5b5061027261025d3660046119fb565b60016020526000908152604090205460ff1681565b604051901515815260200161016d565b34801561028e57600080fd5b506102976109ce565b60405161016d9796959493929190611a8f565b3480156102b657600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546040516001600160a01b03909116815260200161016d565b3480156102fd57600080fd5b5061014461030c3660046119bf565b610a7a565b61014461031f366004611b71565b610b2a565b34801561033057600080fd5b50610144610c50565b34801561034557600080fd5b50610144610c8e565b34801561035a57600080fd5b506000546102729060ff1681565b610144610376366004611bb3565b610cc9565b34801561038757600080fd5b506101446103963660046119fb565b610e56565b6103a3610e94565b60005b818110156104665760018060008585858181106103c5576103c5611c06565b90506020020160208101906103da91906119fb565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905582828281811061041457610414611c06565b905060200201602081019061042991906119fb565b6001600160a01b03167fc6bdfc1f9b9f1f30ad26b86a7c623e58400512467a50e0c80439bfdaf3a2de9860405160405180910390a26001016103a6565b505050565b604080517fc9a51567e61a6d1a243a60e57bf4560e7e543694b79349ce2cba3a14fe21b0426020820152908101839052606081018290526000906104c8906080015b60405160208183030381529060405280519060200120610eef565b90505b92915050565b6104d9610e94565b60005b81811015610466576000600160008585858181106104fc576104fc611c06565b905060200201602081019061051191906119fb565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905582828281811061054b5761054b611c06565b905060200201602081019061056091906119fb565b6001600160a01b03167f3df1f5fcca9e1ece84ca685a63062905d8fe97ddb23246224be416f2d3c8613f60405160405180910390a26001016104dc565b600080516020611ec28339815191528054600160401b810460ff16159067ffffffffffffffff166000811580156105d15750825b905060008267ffffffffffffffff1660011480156105ee5750303b155b9050811580156105fc575080155b1561061a5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561064457845460ff60401b1916600160401b1785555b61064d87610f1c565b61068f604051806040016040528060078152602001665374616b696e6760c81b815250604051806040016040528060018152602001603160f81b815250610f2d565b6000805460ff191687151517905583156106e357845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b60005460ff16158061071657506001600160a01b03811660009081526001602052604090205460ff165b6107625760405162461bcd60e51b815260206004820152601860248201527714dd185ada5b99ce881b9bdd08185b1b1bddd959081d985b60421b60448201526064015b60405180910390fd5b670de0b6b3a764000034101561078a5760405162461bcd60e51b815260040161075990611c1c565b6040513481526001600160a01b0382169033907f510b11bb3f3c799b11307c01ab7db0d335683ef5b2da98f7697de744f465eacc9060200160405180910390a350565b600080516020611ec2833981519152805460029190600160401b900460ff16806108055750805467ffffffffffffffff808416911610155b156108235760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff191667ffffffffffffffff831617600160401b17815560408051808201825260078152665374616b696e6760c81b602080830191909152825180840190935260018352603160f81b9083015261088491610f2d565b805460ff60401b1916815560405167ffffffffffffffff831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050565b6108d8610e94565b6108e26000610f43565b565b60005460ff16158061090e57506001600160a01b03811660009081526001602052604090205460ff165b6109555760405162461bcd60e51b815260206004820152601860248201527714dd185ada5b99ce881b9bdd08185b1b1bddd959081d985b60421b6044820152606401610759565b670de0b6b3a764000034101561097d5760405162461bcd60e51b815260040161075990611c1c565b806001600160a01b0316826001600160a01b03167f510b11bb3f3c799b11307c01ab7db0d335683ef5b2da98f7697de744f465eacc346040516109c291815260200190565b60405180910390a35050565b60006060808280808381600080516020611ea283398151915280549091501580156109fb57506001810154155b610a3f5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606401610759565b610a47610fb4565b610a4f611077565b60408051600080825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b600080516020611ec28339815191528054600160401b810460ff16159067ffffffffffffffff16600081158015610aae5750825b905060008267ffffffffffffffff166001148015610acb5750303b155b905081158015610ad9575080155b15610af75760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610b2157845460ff60401b1916600160401b1785555b61068f87610f1c565b60005460ff161580610b4b57503360009081526001602052604090205460ff165b610b8e5760405162461bcd60e51b815260206004820152601460248201527314dd185ada5b99ce881b9bdd08185b1b1bddd95960621b6044820152606401610759565b68056bc75e2d63100000341015610bb75760405162461bcd60e51b815260040161075990611c1c565b610bc182826110b6565b610c075760405162461bcd60e51b81526020600482015260176024820152765374616b696e673a20696e76616c6964207075626b657960481b6044820152606401610759565b336001600160a01b03167fc7abef7b73f049da6a9bc2349ba5066a39e316eabc9f671b6f9406aa9490a453838334604051610c4493929190611c69565b60405180910390a25050565b610c58610e94565b6000805460ff191660011781556040517f8a943acd5f4e6d3df7565a4a08a93f6b04cc31bb6c01ca4aef7abd6baf455ec39190a1565b610c96610e94565b6000805460ff191681556040517f2d35c8d348a345fd7b3b03b7cfcf7ad0b60c2d46742d5ca536342e4185becb079190a1565b60005460ff161580610cea57503360009081526001602052604090205460ff165b610d2d5760405162461bcd60e51b815260206004820152601460248201527314dd185ada5b99ce881b9bdd08185b1b1bddd95960621b6044820152606401610759565b68056bc75e2d63100000341015610d565760405162461bcd60e51b815260040161075990611c1c565b610d60848461120a565b610da65760405162461bcd60e51b81526020600482015260176024820152765374616b696e673a20696e76616c6964207075626b657960481b6044820152606401610759565b610db284848484611220565b610dfe5760405162461bcd60e51b815260206004820152601a60248201527f5374616b696e673a20696e76616c6964207369676e61747572650000000000006044820152606401610759565b6000610e0a85856112d8565b9050336001600160a01b03167fc7abef7b73f049da6a9bc2349ba5066a39e316eabc9f671b6f9406aa9490a4538234604051610e47929190611ca2565b60405180910390a25050505050565b610e5e610e94565b6001600160a01b038116610e8857604051631e4fbdf760e01b815260006004820152602401610759565b610e9181610f43565b50565b33610ec67f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146108e25760405163118cdaa760e01b8152336004820152602401610759565b60006104cb610efc611325565b8360405161190160f01b8152600281019290925260228201526042902090565b610f24611334565b610e918161136b565b610f35611334565b610f3f8282611373565b5050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1028054606091600080516020611ea283398151915291610ff390611cc4565b80601f016020809104026020016040519081016040528092919081815260200182805461101f90611cc4565b801561106c5780601f106110415761010080835404028352916020019161106c565b820191906000526020600020905b81548152906001019060200180831161104f57829003601f168201915b505050505091505090565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1038054606091600080516020611ea283398151915291610ff390611cc4565b6000602182146111085760405162461bcd60e51b815260206004820152601e60248201527f5374616b696e673a20696e76616c6964207075626b6579206c656e67746800006044820152606401610759565b8282600081811061111b5761111b611c06565b9050013560f81c60f81b6001600160f81b031916600260f81b148061116957508282600081811061114e5761114e611c06565b9050013560f81c60f81b6001600160f81b031916600360f81b145b6111b55760405162461bcd60e51b815260206004820152601e60248201527f5374616b696e673a20696e76616c6964207075626b65792070726566697800006044820152606401610759565b600183013560006111ea858583816111cf576111cf611c06565b919091013560f81c905083600060076401000003d0196113d4565b90506112018282600060076401000003d019611506565b95945050505050565b60006104c883838360076401000003d019611506565b604080517fc9a51567e61a6d1a243a60e57bf4560e7e543694b79349ce2cba3a14fe21b0426020820152908101859052606081018490526000908190611268906080016104ad565b905060006112ac8286868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506115bf92505050565b5050905060006112bc888861160c565b6001600160a01b03928316921691909114979650505050505050565b606060006112ea600184166002611d14565b6040805160f89290921b6001600160f81b03191660208301526021808301969096528051808303909601865260419091019052509192915050565b600061132f611642565b905090565b600080516020611ec283398151915254600160401b900460ff166108e257604051631afcd79f60e31b815260040160405180910390fd5b610e5e611334565b61137b611334565b600080516020611ea28339815191527fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1026113b58482611d7d565b50600381016113c48382611d7d565b5060008082556001909101555050565b60008560ff16600214806113eb57508560ff166003145b6114515760405162461bcd60e51b815260206004820152603160248201527f456c6c697074696343757276653a696e6e76616c696420636f6d7072657373656044820152700c8408a8640e0ded2dce840e0e4caccd2f607b1b6064820152608401610759565b6000828061146157611461611e3d565b838061146f5761146f611e3d565b85858061147e5761147e611e3d565b888a0908848061149057611490611e3d565b858061149e5761149e611e3d565b898a0989090890506114c78160046114b7866001611e53565b6114c19190611e66565b856116b6565b9050600060026114da60ff8a1684611e53565b6114e49190611e7a565b156114f8576114f38285611e8e565b6114fa565b815b98975050505050505050565b60008515806115155750818610155b8061151e575084155b806115295750818510155b1561153657506000611201565b6000828061154657611546611e3d565b86870990506000838061155b5761155b611e3d565b88858061156a5761156a611e3d565b8a8b09099050851561159a57838061158457611584611e3d565b848061159257611592611e3d565b878a09820890505b84156115b45783806115ae576115ae611e3d565b85820890505b149695505050505050565b600080600083516041036115f95760208401516040850151606086015160001a6115eb8882858561178f565b955095509550505050611605565b50508151600091506002905b9250925092565b60408051818152606081018252600091829190602082018180368337505050602081019485526040810193909352505051902090565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61166d61185e565b6116756118c8565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6000816000036117085760405162461bcd60e51b815260206004820152601e60248201527f456c6c697074696343757276653a206d6f64756c7573206973207a65726f00006044820152606401610759565b8360000361171857506000611788565b8260000361172857506001611788565b6001600160ff1b5b801561178457838186161515870a85848509099150836002820486161515870a85848509099150836004820486161515870a85848509099150836008820486161515870a8584850909915060109004611730565b5090505b9392505050565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156117ca5750600091506003905082611854565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561181e573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661184a57506000925060019150829050611854565b9250600091508190505b9450945094915050565b6000600080516020611ea283398151915281611878610fb4565b80519091501561189057805160209091012092915050565b8154801561189f579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b6000600080516020611ea2833981519152816118e2611077565b8051909150156118fa57805160209091012092915050565b6001820154801561189f579392505050565b6000806020838503121561191f57600080fd5b823567ffffffffffffffff8082111561193757600080fd5b818501915085601f83011261194b57600080fd5b81358181111561195a57600080fd5b8660208260051b850101111561196f57600080fd5b60209290920196919550909350505050565b6000806040838503121561199457600080fd5b50508035926020909101359150565b80356001600160a01b03811681146119ba57600080fd5b919050565b600080604083850312156119d257600080fd5b6119db836119a3565b9150602083013580151581146119f057600080fd5b809150509250929050565b600060208284031215611a0d57600080fd5b6104c8826119a3565b60008060408385031215611a2957600080fd5b611a32836119a3565b9150611a40602084016119a3565b90509250929050565b6000815180845260005b81811015611a6f57602081850181015186830182015201611a53565b506000602082860101526020601f19601f83011685010191505092915050565b60ff60f81b881681526000602060e06020840152611ab060e084018a611a49565b8381036040850152611ac2818a611a49565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015611b1657835183529284019291840191600101611afa565b50909c9b505050505050505050505050565b60008083601f840112611b3a57600080fd5b50813567ffffffffffffffff811115611b5257600080fd5b602083019150836020828501011115611b6a57600080fd5b9250929050565b60008060208385031215611b8457600080fd5b823567ffffffffffffffff811115611b9b57600080fd5b611ba785828601611b28565b90969095509350505050565b60008060008060608587031215611bc957600080fd5b8435935060208501359250604085013567ffffffffffffffff811115611bee57600080fd5b611bfa87828801611b28565b95989497509550505050565b634e487b7160e01b600052603260045260246000fd5b6020808252601d908201527f5374616b696e673a20696e73756666696369656e74206465706f736974000000604082015260600190565b634e487b7160e01b600052604160045260246000fd5b604081528260408201528284606083013760006060848301015260006060601f19601f8601168301019050826020830152949350505050565b604081526000611cb56040830185611a49565b90508260208301529392505050565b600181811c90821680611cd857607f821691505b602082108103611cf857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60ff81811683821601908111156104cb576104cb611cfe565b601f821115610466576000816000526020600020601f850160051c81016020861015611d565750805b601f850160051c820191505b81811015611d7557828155600101611d62565b505050505050565b815167ffffffffffffffff811115611d9757611d97611c53565b611dab81611da58454611cc4565b84611d2d565b602080601f831160018114611de05760008415611dc85750858301515b600019600386901b1c1916600185901b178555611d75565b600085815260208120601f198616915b82811015611e0f57888601518255948401946001909101908401611df0565b5085821015611e2d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601260045260246000fd5b808201808211156104cb576104cb611cfe565b600082611e7557611e75611e3d565b500490565b600082611e8957611e89611e3d565b500690565b818103818111156104cb576104cb611cfe56fea16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a264697066735822122057ddea58705967f95dd719b1291a1c26f48f1f5098c7783101c5cdc9cb35c6d664736f6c63430008180033", } // StakingABI is the input ABI used to generate the binding from. @@ -521,25 +521,46 @@ func (_Staking *StakingTransactorSession) CreateValidator0(x [32]byte, y [32]byt return _Staking.Contract.CreateValidator0(&_Staking.TransactOpts, x, y, signature) } -// Delegate is a paid mutator transaction binding the contract method 0x8ab65686. +// Delegate is a paid mutator transaction binding the contract method 0x5c19a95c. // -// Solidity: function delegate(address delegator, address validator) payable returns() -func (_Staking *StakingTransactor) Delegate(opts *bind.TransactOpts, delegator common.Address, validator common.Address) (*types.Transaction, error) { - return _Staking.contract.Transact(opts, "delegate", delegator, validator) +// Solidity: function delegate(address validator) payable returns() +func (_Staking *StakingTransactor) Delegate(opts *bind.TransactOpts, validator common.Address) (*types.Transaction, error) { + return _Staking.contract.Transact(opts, "delegate", validator) } -// Delegate is a paid mutator transaction binding the contract method 0x8ab65686. +// Delegate is a paid mutator transaction binding the contract method 0x5c19a95c. // -// Solidity: function delegate(address delegator, address validator) payable returns() -func (_Staking *StakingSession) Delegate(delegator common.Address, validator common.Address) (*types.Transaction, error) { - return _Staking.Contract.Delegate(&_Staking.TransactOpts, delegator, validator) +// Solidity: function delegate(address validator) payable returns() +func (_Staking *StakingSession) Delegate(validator common.Address) (*types.Transaction, error) { + return _Staking.Contract.Delegate(&_Staking.TransactOpts, validator) } -// Delegate is a paid mutator transaction binding the contract method 0x8ab65686. +// Delegate is a paid mutator transaction binding the contract method 0x5c19a95c. // -// Solidity: function delegate(address delegator, address validator) payable returns() -func (_Staking *StakingTransactorSession) Delegate(delegator common.Address, validator common.Address) (*types.Transaction, error) { - return _Staking.Contract.Delegate(&_Staking.TransactOpts, delegator, validator) +// Solidity: function delegate(address validator) payable returns() +func (_Staking *StakingTransactorSession) Delegate(validator common.Address) (*types.Transaction, error) { + return _Staking.Contract.Delegate(&_Staking.TransactOpts, validator) +} + +// DelegateFor is a paid mutator transaction binding the contract method 0x78fcbe5b. +// +// Solidity: function delegateFor(address delegator, address validator) payable returns() +func (_Staking *StakingTransactor) DelegateFor(opts *bind.TransactOpts, delegator common.Address, validator common.Address) (*types.Transaction, error) { + return _Staking.contract.Transact(opts, "delegateFor", delegator, validator) +} + +// DelegateFor is a paid mutator transaction binding the contract method 0x78fcbe5b. +// +// Solidity: function delegateFor(address delegator, address validator) payable returns() +func (_Staking *StakingSession) DelegateFor(delegator common.Address, validator common.Address) (*types.Transaction, error) { + return _Staking.Contract.DelegateFor(&_Staking.TransactOpts, delegator, validator) +} + +// DelegateFor is a paid mutator transaction binding the contract method 0x78fcbe5b. +// +// Solidity: function delegateFor(address delegator, address validator) payable returns() +func (_Staking *StakingTransactorSession) DelegateFor(delegator common.Address, validator common.Address) (*types.Transaction, error) { + return _Staking.Contract.DelegateFor(&_Staking.TransactOpts, delegator, validator) } // DisableAllowlist is a paid mutator transaction binding the contract method 0xcf8e629a. diff --git a/contracts/core/.gas-snapshot b/contracts/core/.gas-snapshot index 59949c3f7..859bb1315 100644 --- a/contracts/core/.gas-snapshot +++ b/contracts/core/.gas-snapshot @@ -1,12 +1,12 @@ -Admin_Test:test_pause_unpause() (gas: 33930691) -Admin_Test:test_pause_unpause_bridge() (gas: 28960444) -Admin_Test:test_pause_unpause_xcall() (gas: 33884665) -Admin_Test:test_pause_unpause_xsubmit() (gas: 33884372) -Admin_Test:test_upgrade() (gas: 37965866) -AllocPredeploys_Test:test_num_allocs() (gas: 1181319043) -AllocPredeploys_Test:test_predeploys() (gas: 1181300853) -AllocPredeploys_Test:test_preinstalls() (gas: 1182017269) -AllocPredeploys_Test:test_proxies() (gas: 1408944070) +Admin_Test:test_pause_unpause() (gas: 34067696) +Admin_Test:test_pause_unpause_bridge() (gas: 29097449) +Admin_Test:test_pause_unpause_xcall() (gas: 34021670) +Admin_Test:test_pause_unpause_xsubmit() (gas: 34021377) +Admin_Test:test_upgrade() (gas: 38102871) +AllocPredeploys_Test:test_num_allocs() (gas: 1181324720) +AllocPredeploys_Test:test_predeploys() (gas: 1181306530) +AllocPredeploys_Test:test_preinstalls() (gas: 1182022946) +AllocPredeploys_Test:test_proxies() (gas: 1408949747) FeeOracleV1_Test:test_bulkSetFeeParams() (gas: 173154) FeeOracleV1_Test:test_feeFor() (gas: 122830) FeeOracleV1_Test:test_setBaseGasLimit() (gas: 32375) @@ -149,8 +149,8 @@ Quorum_Test:test_verify_sigsNotSorted_reverts() (gas: 282992) Quorum_Test:test_verify_succeeds() (gas: 294059) Slashing_Test:test_stub() (gas: 143) Slashing_Test:test_unjail() (gas: 54734) -Staking_Test:test_createValidator() (gas: 145464) -Staking_Test:test_delegate() (gas: 99147) +Staking_Test:test_createValidator() (gas: 145288) +Staking_Test:test_delegate() (gas: 98742) Staking_Test:test_stub() (gas: 143) Upgrade_Test:test_stub() (gas: 143) XAppUpgradeable_Test:test_isXCall() (gas: 148924) diff --git a/contracts/core/script/admin/StakingPostUpgradeTest.sol b/contracts/core/script/admin/StakingPostUpgradeTest.sol index 64201baa9..57454a8d0 100644 --- a/contracts/core/script/admin/StakingPostUpgradeTest.sol +++ b/contracts/core/script/admin/StakingPostUpgradeTest.sol @@ -86,11 +86,16 @@ contract StakingPostUpgradeTest is Test { function _testDelegate() internal { uint256 deposit = staking.MinDelegation(); - vm.deal(validator, deposit); + vm.deal(validator, deposit * 2); + + vm.expectEmit(); + emit Staking.Delegate(validator, validator, deposit); + vm.prank(validator); + staking.delegate{ value: deposit }(validator); vm.expectEmit(); emit Staking.Delegate(validator, validator, deposit); vm.prank(validator); - staking.delegate{ value: deposit }(validator, validator); + staking.delegateFor{ value: deposit }(validator, validator); } } diff --git a/contracts/core/src/octane/Staking.sol b/contracts/core/src/octane/Staking.sol index f044346e9..d5775b69c 100644 --- a/contracts/core/src/octane/Staking.sol +++ b/contracts/core/src/octane/Staking.sol @@ -149,10 +149,23 @@ contract Staking is OwnableUpgradeable, EIP712Upgradeable { } /** - * @notice Increase your validators self delegation. + * @notice Delegate tokens to a validator * @dev Proxies x/staking.MsgDelegate + * @param validator The address of the validator to delegate to */ - function delegate(address delegator, address validator) external payable { + function delegate(address validator) external payable { + require(!isAllowlistEnabled || isAllowedValidator[validator], "Staking: not allowed val"); + require(msg.value >= MinDelegation, "Staking: insufficient deposit"); + + emit Delegate(msg.sender, validator, msg.value); + } + + /** + * @notice Delegate tokens to a validator for another address + * @param delegator The address of the delegator + * @param validator The address of the validator to delegate to + */ + function delegateFor(address delegator, address validator) external payable { require(!isAllowlistEnabled || isAllowedValidator[validator], "Staking: not allowed val"); require(msg.value >= MinDelegation, "Staking: insufficient deposit"); diff --git a/contracts/core/test/octane/Staking.t.sol b/contracts/core/test/octane/Staking.t.sol index ee6ba8e20..568f33c80 100644 --- a/contracts/core/test/octane/Staking.t.sol +++ b/contracts/core/test/octane/Staking.t.sol @@ -115,7 +115,7 @@ contract Staking_Test is Test { vm.deal(validator, minDelegation); vm.expectRevert("Staking: insufficient deposit"); - staking.delegate{ value: minDelegation - 1 }(validator, validator); + staking.delegate{ value: minDelegation - 1 }(validator); // if allowlist enabled, must be in allowlist vm.prank(owner); @@ -123,7 +123,7 @@ contract Staking_Test is Test { vm.expectRevert("Staking: not allowed val"); vm.prank(validator); - staking.delegate{ value: minDelegation }(validator, validator); + staking.delegate{ value: minDelegation }(validator); // succeeds address[] memory validators = new address[](1); @@ -135,7 +135,7 @@ contract Staking_Test is Test { emit Delegate(validator, validator, minDelegation); vm.prank(validator); - staking.delegate{ value: minDelegation }(validator, validator); + staking.delegate{ value: minDelegation }(validator); } } diff --git a/halo/genutil/evm/testdata/TestMakeEVMGenesis.golden b/halo/genutil/evm/testdata/TestMakeEVMGenesis.golden index c435f5fcd..cd1471a47 100644 --- a/halo/genutil/evm/testdata/TestMakeEVMGenesis.golden +++ b/halo/genutil/evm/testdata/TestMakeEVMGenesis.golden @@ -11646,7 +11646,7 @@ "balance": "0x0" }, "333333fffffffffffffffffffffffffffffffffe": { - "code": "0x6080604052600436106101145760003560e01c806384b0196e116100a0578063c6a2aac811610064578063c6a2aac814610306578063cf8e629a1461031b578063d146fd1b14610330578063eb4bd8441461034a578063f2fde38b1461035d57600080fd5b806384b0196e146102515780638ab65686146102795780638da5cb5b1461028c5780638f38fae8146102d3578063a5a470ad146102f357600080fd5b8063400ada75116100e7578063400ada75146101ab57806359bcddde146101cb5780635cd8a76b146101e7578063715018a6146101fc57806384768b7a1461021157600080fd5b8063117407e31461011957806311bcd8301461013b578063296192f41461016b5780633f0b1edf1461018b575b600080fd5b34801561012557600080fd5b50610139610134366004611817565b61037d565b005b34801561014757600080fd5b5061015868056bc75e2d6310000081565b6040519081526020015b60405180910390f35b34801561017757600080fd5b5061015861018636600461188c565b61044d565b34801561019757600080fd5b506101396101a6366004611817565b6104b3565b3480156101b757600080fd5b506101396101c63660046118ca565b61057f565b3480156101d757600080fd5b50610158670de0b6b3a764000081565b3480156101f357600080fd5b506101396106ce565b34801561020857600080fd5b506101396107d1565b34801561021d57600080fd5b5061024161022c366004611906565b60016020526000908152604090205460ff1681565b6040519015158152602001610162565b34801561025d57600080fd5b506102666107e5565b6040516101629796959493929190611967565b610139610287366004611a00565b610896565b34801561029857600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546040516001600160a01b039091168152602001610162565b3480156102df57600080fd5b506101396102ee3660046118ca565b610985565b610139610301366004611a7c565b610a35565b34801561031257600080fd5b50610139610b5b565b34801561032757600080fd5b50610139610b99565b34801561033c57600080fd5b506000546102419060ff1681565b610139610358366004611abe565b610bd4565b34801561036957600080fd5b50610139610378366004611906565b610d61565b610385610d9f565b60005b818110156104485760018060008585858181106103a7576103a7611b11565b90506020020160208101906103bc9190611906565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558282828181106103f6576103f6611b11565b905060200201602081019061040b9190611906565b6001600160a01b03167fc6bdfc1f9b9f1f30ad26b86a7c623e58400512467a50e0c80439bfdaf3a2de9860405160405180910390a2600101610388565b505050565b604080517fc9a51567e61a6d1a243a60e57bf4560e7e543694b79349ce2cba3a14fe21b0426020820152908101839052606081018290526000906104aa906080015b60405160208183030381529060405280519060200120610dfa565b90505b92915050565b6104bb610d9f565b60005b81811015610448576000600160008585858181106104de576104de611b11565b90506020020160208101906104f39190611906565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905582828281811061052d5761052d611b11565b90506020020160208101906105429190611906565b6001600160a01b03167f3df1f5fcca9e1ece84ca685a63062905d8fe97ddb23246224be416f2d3c8613f60405160405180910390a26001016104be565b600080516020611dcd8339815191528054600160401b810460ff16159067ffffffffffffffff166000811580156105b35750825b905060008267ffffffffffffffff1660011480156105d05750303b155b9050811580156105de575080155b156105fc5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561062657845460ff60401b1916600160401b1785555b61062f87610e27565b610671604051806040016040528060078152602001665374616b696e6760c81b815250604051806040016040528060018152602001603160f81b815250610e38565b6000805460ff191687151517905583156106c557845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b600080516020611dcd833981519152805460029190600160401b900460ff16806107065750805467ffffffffffffffff808416911610155b156107245760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff191667ffffffffffffffff831617600160401b17815560408051808201825260078152665374616b696e6760c81b602080830191909152825180840190935260018352603160f81b9083015261078591610e38565b805460ff60401b1916815560405167ffffffffffffffff831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050565b6107d9610d9f565b6107e36000610e4e565b565b60006060808280808381600080516020611dad833981519152805490915015801561081257506001810154155b61085b5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b60448201526064015b60405180910390fd5b610863610ebf565b61086b610f82565b60408051600080825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b60005460ff1615806108c057506001600160a01b03811660009081526001602052604090205460ff165b61090c5760405162461bcd60e51b815260206004820152601860248201527f5374616b696e673a206e6f7420616c6c6f7765642076616c00000000000000006044820152606401610852565b670de0b6b3a76400003410156109345760405162461bcd60e51b815260040161085290611b3d565b806001600160a01b0316826001600160a01b03167f510b11bb3f3c799b11307c01ab7db0d335683ef5b2da98f7697de744f465eacc3460405161097991815260200190565b60405180910390a35050565b600080516020611dcd8339815191528054600160401b810460ff16159067ffffffffffffffff166000811580156109b95750825b905060008267ffffffffffffffff1660011480156109d65750303b155b9050811580156109e4575080155b15610a025760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610a2c57845460ff60401b1916600160401b1785555b61067187610e27565b60005460ff161580610a5657503360009081526001602052604090205460ff165b610a995760405162461bcd60e51b815260206004820152601460248201527314dd185ada5b99ce881b9bdd08185b1b1bddd95960621b6044820152606401610852565b68056bc75e2d63100000341015610ac25760405162461bcd60e51b815260040161085290611b3d565b610acc8282610fc1565b610b125760405162461bcd60e51b81526020600482015260176024820152765374616b696e673a20696e76616c6964207075626b657960481b6044820152606401610852565b336001600160a01b03167fc7abef7b73f049da6a9bc2349ba5066a39e316eabc9f671b6f9406aa9490a453838334604051610b4f93929190611b74565b60405180910390a25050565b610b63610d9f565b6000805460ff191660011781556040517f8a943acd5f4e6d3df7565a4a08a93f6b04cc31bb6c01ca4aef7abd6baf455ec39190a1565b610ba1610d9f565b6000805460ff191681556040517f2d35c8d348a345fd7b3b03b7cfcf7ad0b60c2d46742d5ca536342e4185becb079190a1565b60005460ff161580610bf557503360009081526001602052604090205460ff165b610c385760405162461bcd60e51b815260206004820152601460248201527314dd185ada5b99ce881b9bdd08185b1b1bddd95960621b6044820152606401610852565b68056bc75e2d63100000341015610c615760405162461bcd60e51b815260040161085290611b3d565b610c6b8484611115565b610cb15760405162461bcd60e51b81526020600482015260176024820152765374616b696e673a20696e76616c6964207075626b657960481b6044820152606401610852565b610cbd8484848461112b565b610d095760405162461bcd60e51b815260206004820152601a60248201527f5374616b696e673a20696e76616c6964207369676e61747572650000000000006044820152606401610852565b6000610d1585856111e3565b9050336001600160a01b03167fc7abef7b73f049da6a9bc2349ba5066a39e316eabc9f671b6f9406aa9490a4538234604051610d52929190611bad565b60405180910390a25050505050565b610d69610d9f565b6001600160a01b038116610d9357604051631e4fbdf760e01b815260006004820152602401610852565b610d9c81610e4e565b50565b33610dd17f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146107e35760405163118cdaa760e01b8152336004820152602401610852565b60006104ad610e07611230565b8360405161190160f01b8152600281019290925260228201526042902090565b610e2f61123f565b610d9c81611276565b610e4061123f565b610e4a828261127e565b5050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1028054606091600080516020611dad83398151915291610efe90611bcf565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2a90611bcf565b8015610f775780601f10610f4c57610100808354040283529160200191610f77565b820191906000526020600020905b815481529060010190602001808311610f5a57829003601f168201915b505050505091505090565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1038054606091600080516020611dad83398151915291610efe90611bcf565b6000602182146110135760405162461bcd60e51b815260206004820152601e60248201527f5374616b696e673a20696e76616c6964207075626b6579206c656e67746800006044820152606401610852565b8282600081811061102657611026611b11565b9050013560f81c60f81b6001600160f81b031916600260f81b148061107457508282600081811061105957611059611b11565b9050013560f81c60f81b6001600160f81b031916600360f81b145b6110c05760405162461bcd60e51b815260206004820152601e60248201527f5374616b696e673a20696e76616c6964207075626b65792070726566697800006044820152606401610852565b600183013560006110f5858583816110da576110da611b11565b919091013560f81c905083600060076401000003d0196112df565b905061110c8282600060076401000003d019611411565b95945050505050565b60006104aa83838360076401000003d019611411565b604080517fc9a51567e61a6d1a243a60e57bf4560e7e543694b79349ce2cba3a14fe21b04260208201529081018590526060810184905260009081906111739060800161048f565b905060006111b78286868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506114ca92505050565b5050905060006111c78888611517565b6001600160a01b03928316921691909114979650505050505050565b606060006111f5600184166002611c1f565b6040805160f89290921b6001600160f81b03191660208301526021808301969096528051808303909601865260419091019052509192915050565b600061123a61154d565b905090565b600080516020611dcd83398151915254600160401b900460ff166107e357604051631afcd79f60e31b815260040160405180910390fd5b610d6961123f565b61128661123f565b600080516020611dad8339815191527fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1026112c08482611c88565b50600381016112cf8382611c88565b5060008082556001909101555050565b60008560ff16600214806112f657508560ff166003145b61135c5760405162461bcd60e51b815260206004820152603160248201527f456c6c697074696343757276653a696e6e76616c696420636f6d7072657373656044820152700c8408a8640e0ded2dce840e0e4caccd2f607b1b6064820152608401610852565b6000828061136c5761136c611d48565b838061137a5761137a611d48565b85858061138957611389611d48565b888a0908848061139b5761139b611d48565b85806113a9576113a9611d48565b898a0989090890506113d28160046113c2866001611d5e565b6113cc9190611d71565b856115c1565b9050600060026113e560ff8a1684611d5e565b6113ef9190611d85565b15611403576113fe8285611d99565b611405565b815b98975050505050505050565b60008515806114205750818610155b80611429575084155b806114345750818510155b156114415750600061110c565b6000828061145157611451611d48565b86870990506000838061146657611466611d48565b88858061147557611475611d48565b8a8b0909905085156114a557838061148f5761148f611d48565b848061149d5761149d611d48565b878a09820890505b84156114bf5783806114b9576114b9611d48565b85820890505b149695505050505050565b600080600083516041036115045760208401516040850151606086015160001a6114f68882858561169a565b955095509550505050611510565b50508151600091506002905b9250925092565b60408051818152606081018252600091829190602082018180368337505050602081019485526040810193909352505051902090565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611578611769565b6115806117d3565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6000816000036116135760405162461bcd60e51b815260206004820152601e60248201527f456c6c697074696343757276653a206d6f64756c7573206973207a65726f00006044820152606401610852565b8360000361162357506000611693565b8260000361163357506001611693565b6001600160ff1b5b801561168f57838186161515870a85848509099150836002820486161515870a85848509099150836004820486161515870a85848509099150836008820486161515870a858485090991506010900461163b565b5090505b9392505050565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156116d5575060009150600390508261175f565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015611729573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166117555750600092506001915082905061175f565b9250600091508190505b9450945094915050565b6000600080516020611dad83398151915281611783610ebf565b80519091501561179b57805160209091012092915050565b815480156117aa579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b6000600080516020611dad833981519152816117ed610f82565b80519091501561180557805160209091012092915050565b600182015480156117aa579392505050565b6000806020838503121561182a57600080fd5b823567ffffffffffffffff8082111561184257600080fd5b818501915085601f83011261185657600080fd5b81358181111561186557600080fd5b8660208260051b850101111561187a57600080fd5b60209290920196919550909350505050565b6000806040838503121561189f57600080fd5b50508035926020909101359150565b80356001600160a01b03811681146118c557600080fd5b919050565b600080604083850312156118dd57600080fd5b6118e6836118ae565b9150602083013580151581146118fb57600080fd5b809150509250929050565b60006020828403121561191857600080fd5b6104aa826118ae565b6000815180845260005b818110156119475760208185018101518683018201520161192b565b506000602082860101526020601f19601f83011685010191505092915050565b60ff60f81b881681526000602060e0602084015261198860e084018a611921565b838103604085015261199a818a611921565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b818110156119ee578351835292840192918401916001016119d2565b50909c9b505050505050505050505050565b60008060408385031215611a1357600080fd5b611a1c836118ae565b9150611a2a602084016118ae565b90509250929050565b60008083601f840112611a4557600080fd5b50813567ffffffffffffffff811115611a5d57600080fd5b602083019150836020828501011115611a7557600080fd5b9250929050565b60008060208385031215611a8f57600080fd5b823567ffffffffffffffff811115611aa657600080fd5b611ab285828601611a33565b90969095509350505050565b60008060008060608587031215611ad457600080fd5b8435935060208501359250604085013567ffffffffffffffff811115611af957600080fd5b611b0587828801611a33565b95989497509550505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6020808252601d908201527f5374616b696e673a20696e73756666696369656e74206465706f736974000000604082015260600190565b604081528260408201528284606083013760006060848301015260006060601f19601f8601168301019050826020830152949350505050565b604081526000611bc06040830185611921565b90508260208301529392505050565b600181811c90821680611be357607f821691505b602082108103611c0357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60ff81811683821601908111156104ad576104ad611c09565b601f821115610448576000816000526020600020601f850160051c81016020861015611c615750805b601f850160051c820191505b81811015611c8057828155600101611c6d565b505050505050565b815167ffffffffffffffff811115611ca257611ca2611b27565b611cb681611cb08454611bcf565b84611c38565b602080601f831160018114611ceb5760008415611cd35750858301515b600019600386901b1c1916600185901b178555611c80565b600085815260208120601f198616915b82811015611d1a57888601518255948401946001909101908401611cfb565b5085821015611d385787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601260045260246000fd5b808201808211156104ad576104ad611c09565b600082611d8057611d80611d48565b500490565b600082611d9457611d94611d48565b500690565b818103818111156104ad576104ad611c0956fea16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a26469706673582212209ec1de4b1ad9f96937cdc63dd5d0c5e8f62af7eef29a7e85ce59896560b0f83264736f6c63430008180033", + "code": "0x60806040526004361061011f5760003560e01c806384768b7a116100a0578063c6a2aac811610064578063c6a2aac814610324578063cf8e629a14610339578063d146fd1b1461034e578063eb4bd84414610368578063f2fde38b1461037b57600080fd5b806384768b7a1461024257806384b0196e146102825780638da5cb5b146102aa5780638f38fae8146102f1578063a5a470ad1461031157600080fd5b806359bcddde116100e757806359bcddde146101d65780635c19a95c146101f25780635cd8a76b14610205578063715018a61461021a57806378fcbe5b1461022f57600080fd5b8063117407e31461012457806311bcd83014610146578063296192f4146101765780633f0b1edf14610196578063400ada75146101b6575b600080fd5b34801561013057600080fd5b5061014461013f36600461190c565b61039b565b005b34801561015257600080fd5b5061016368056bc75e2d6310000081565b6040519081526020015b60405180910390f35b34801561018257600080fd5b50610163610191366004611981565b61046b565b3480156101a257600080fd5b506101446101b136600461190c565b6104d1565b3480156101c257600080fd5b506101446101d13660046119bf565b61059d565b3480156101e257600080fd5b50610163670de0b6b3a764000081565b6101446102003660046119fb565b6106ec565b34801561021157600080fd5b506101446107cd565b34801561022657600080fd5b506101446108d0565b61014461023d366004611a16565b6108e4565b34801561024e57600080fd5b5061027261025d3660046119fb565b60016020526000908152604090205460ff1681565b604051901515815260200161016d565b34801561028e57600080fd5b506102976109ce565b60405161016d9796959493929190611a8f565b3480156102b657600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546040516001600160a01b03909116815260200161016d565b3480156102fd57600080fd5b5061014461030c3660046119bf565b610a7a565b61014461031f366004611b71565b610b2a565b34801561033057600080fd5b50610144610c50565b34801561034557600080fd5b50610144610c8e565b34801561035a57600080fd5b506000546102729060ff1681565b610144610376366004611bb3565b610cc9565b34801561038757600080fd5b506101446103963660046119fb565b610e56565b6103a3610e94565b60005b818110156104665760018060008585858181106103c5576103c5611c06565b90506020020160208101906103da91906119fb565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905582828281811061041457610414611c06565b905060200201602081019061042991906119fb565b6001600160a01b03167fc6bdfc1f9b9f1f30ad26b86a7c623e58400512467a50e0c80439bfdaf3a2de9860405160405180910390a26001016103a6565b505050565b604080517fc9a51567e61a6d1a243a60e57bf4560e7e543694b79349ce2cba3a14fe21b0426020820152908101839052606081018290526000906104c8906080015b60405160208183030381529060405280519060200120610eef565b90505b92915050565b6104d9610e94565b60005b81811015610466576000600160008585858181106104fc576104fc611c06565b905060200201602081019061051191906119fb565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905582828281811061054b5761054b611c06565b905060200201602081019061056091906119fb565b6001600160a01b03167f3df1f5fcca9e1ece84ca685a63062905d8fe97ddb23246224be416f2d3c8613f60405160405180910390a26001016104dc565b600080516020611ec28339815191528054600160401b810460ff16159067ffffffffffffffff166000811580156105d15750825b905060008267ffffffffffffffff1660011480156105ee5750303b155b9050811580156105fc575080155b1561061a5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561064457845460ff60401b1916600160401b1785555b61064d87610f1c565b61068f604051806040016040528060078152602001665374616b696e6760c81b815250604051806040016040528060018152602001603160f81b815250610f2d565b6000805460ff191687151517905583156106e357845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b60005460ff16158061071657506001600160a01b03811660009081526001602052604090205460ff165b6107625760405162461bcd60e51b815260206004820152601860248201527714dd185ada5b99ce881b9bdd08185b1b1bddd959081d985b60421b60448201526064015b60405180910390fd5b670de0b6b3a764000034101561078a5760405162461bcd60e51b815260040161075990611c1c565b6040513481526001600160a01b0382169033907f510b11bb3f3c799b11307c01ab7db0d335683ef5b2da98f7697de744f465eacc9060200160405180910390a350565b600080516020611ec2833981519152805460029190600160401b900460ff16806108055750805467ffffffffffffffff808416911610155b156108235760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff191667ffffffffffffffff831617600160401b17815560408051808201825260078152665374616b696e6760c81b602080830191909152825180840190935260018352603160f81b9083015261088491610f2d565b805460ff60401b1916815560405167ffffffffffffffff831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050565b6108d8610e94565b6108e26000610f43565b565b60005460ff16158061090e57506001600160a01b03811660009081526001602052604090205460ff165b6109555760405162461bcd60e51b815260206004820152601860248201527714dd185ada5b99ce881b9bdd08185b1b1bddd959081d985b60421b6044820152606401610759565b670de0b6b3a764000034101561097d5760405162461bcd60e51b815260040161075990611c1c565b806001600160a01b0316826001600160a01b03167f510b11bb3f3c799b11307c01ab7db0d335683ef5b2da98f7697de744f465eacc346040516109c291815260200190565b60405180910390a35050565b60006060808280808381600080516020611ea283398151915280549091501580156109fb57506001810154155b610a3f5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606401610759565b610a47610fb4565b610a4f611077565b60408051600080825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b600080516020611ec28339815191528054600160401b810460ff16159067ffffffffffffffff16600081158015610aae5750825b905060008267ffffffffffffffff166001148015610acb5750303b155b905081158015610ad9575080155b15610af75760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610b2157845460ff60401b1916600160401b1785555b61068f87610f1c565b60005460ff161580610b4b57503360009081526001602052604090205460ff165b610b8e5760405162461bcd60e51b815260206004820152601460248201527314dd185ada5b99ce881b9bdd08185b1b1bddd95960621b6044820152606401610759565b68056bc75e2d63100000341015610bb75760405162461bcd60e51b815260040161075990611c1c565b610bc182826110b6565b610c075760405162461bcd60e51b81526020600482015260176024820152765374616b696e673a20696e76616c6964207075626b657960481b6044820152606401610759565b336001600160a01b03167fc7abef7b73f049da6a9bc2349ba5066a39e316eabc9f671b6f9406aa9490a453838334604051610c4493929190611c69565b60405180910390a25050565b610c58610e94565b6000805460ff191660011781556040517f8a943acd5f4e6d3df7565a4a08a93f6b04cc31bb6c01ca4aef7abd6baf455ec39190a1565b610c96610e94565b6000805460ff191681556040517f2d35c8d348a345fd7b3b03b7cfcf7ad0b60c2d46742d5ca536342e4185becb079190a1565b60005460ff161580610cea57503360009081526001602052604090205460ff165b610d2d5760405162461bcd60e51b815260206004820152601460248201527314dd185ada5b99ce881b9bdd08185b1b1bddd95960621b6044820152606401610759565b68056bc75e2d63100000341015610d565760405162461bcd60e51b815260040161075990611c1c565b610d60848461120a565b610da65760405162461bcd60e51b81526020600482015260176024820152765374616b696e673a20696e76616c6964207075626b657960481b6044820152606401610759565b610db284848484611220565b610dfe5760405162461bcd60e51b815260206004820152601a60248201527f5374616b696e673a20696e76616c6964207369676e61747572650000000000006044820152606401610759565b6000610e0a85856112d8565b9050336001600160a01b03167fc7abef7b73f049da6a9bc2349ba5066a39e316eabc9f671b6f9406aa9490a4538234604051610e47929190611ca2565b60405180910390a25050505050565b610e5e610e94565b6001600160a01b038116610e8857604051631e4fbdf760e01b815260006004820152602401610759565b610e9181610f43565b50565b33610ec67f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146108e25760405163118cdaa760e01b8152336004820152602401610759565b60006104cb610efc611325565b8360405161190160f01b8152600281019290925260228201526042902090565b610f24611334565b610e918161136b565b610f35611334565b610f3f8282611373565b5050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1028054606091600080516020611ea283398151915291610ff390611cc4565b80601f016020809104026020016040519081016040528092919081815260200182805461101f90611cc4565b801561106c5780601f106110415761010080835404028352916020019161106c565b820191906000526020600020905b81548152906001019060200180831161104f57829003601f168201915b505050505091505090565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1038054606091600080516020611ea283398151915291610ff390611cc4565b6000602182146111085760405162461bcd60e51b815260206004820152601e60248201527f5374616b696e673a20696e76616c6964207075626b6579206c656e67746800006044820152606401610759565b8282600081811061111b5761111b611c06565b9050013560f81c60f81b6001600160f81b031916600260f81b148061116957508282600081811061114e5761114e611c06565b9050013560f81c60f81b6001600160f81b031916600360f81b145b6111b55760405162461bcd60e51b815260206004820152601e60248201527f5374616b696e673a20696e76616c6964207075626b65792070726566697800006044820152606401610759565b600183013560006111ea858583816111cf576111cf611c06565b919091013560f81c905083600060076401000003d0196113d4565b90506112018282600060076401000003d019611506565b95945050505050565b60006104c883838360076401000003d019611506565b604080517fc9a51567e61a6d1a243a60e57bf4560e7e543694b79349ce2cba3a14fe21b0426020820152908101859052606081018490526000908190611268906080016104ad565b905060006112ac8286868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506115bf92505050565b5050905060006112bc888861160c565b6001600160a01b03928316921691909114979650505050505050565b606060006112ea600184166002611d14565b6040805160f89290921b6001600160f81b03191660208301526021808301969096528051808303909601865260419091019052509192915050565b600061132f611642565b905090565b600080516020611ec283398151915254600160401b900460ff166108e257604051631afcd79f60e31b815260040160405180910390fd5b610e5e611334565b61137b611334565b600080516020611ea28339815191527fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1026113b58482611d7d565b50600381016113c48382611d7d565b5060008082556001909101555050565b60008560ff16600214806113eb57508560ff166003145b6114515760405162461bcd60e51b815260206004820152603160248201527f456c6c697074696343757276653a696e6e76616c696420636f6d7072657373656044820152700c8408a8640e0ded2dce840e0e4caccd2f607b1b6064820152608401610759565b6000828061146157611461611e3d565b838061146f5761146f611e3d565b85858061147e5761147e611e3d565b888a0908848061149057611490611e3d565b858061149e5761149e611e3d565b898a0989090890506114c78160046114b7866001611e53565b6114c19190611e66565b856116b6565b9050600060026114da60ff8a1684611e53565b6114e49190611e7a565b156114f8576114f38285611e8e565b6114fa565b815b98975050505050505050565b60008515806115155750818610155b8061151e575084155b806115295750818510155b1561153657506000611201565b6000828061154657611546611e3d565b86870990506000838061155b5761155b611e3d565b88858061156a5761156a611e3d565b8a8b09099050851561159a57838061158457611584611e3d565b848061159257611592611e3d565b878a09820890505b84156115b45783806115ae576115ae611e3d565b85820890505b149695505050505050565b600080600083516041036115f95760208401516040850151606086015160001a6115eb8882858561178f565b955095509550505050611605565b50508151600091506002905b9250925092565b60408051818152606081018252600091829190602082018180368337505050602081019485526040810193909352505051902090565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61166d61185e565b6116756118c8565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6000816000036117085760405162461bcd60e51b815260206004820152601e60248201527f456c6c697074696343757276653a206d6f64756c7573206973207a65726f00006044820152606401610759565b8360000361171857506000611788565b8260000361172857506001611788565b6001600160ff1b5b801561178457838186161515870a85848509099150836002820486161515870a85848509099150836004820486161515870a85848509099150836008820486161515870a8584850909915060109004611730565b5090505b9392505050565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156117ca5750600091506003905082611854565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561181e573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661184a57506000925060019150829050611854565b9250600091508190505b9450945094915050565b6000600080516020611ea283398151915281611878610fb4565b80519091501561189057805160209091012092915050565b8154801561189f579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b6000600080516020611ea2833981519152816118e2611077565b8051909150156118fa57805160209091012092915050565b6001820154801561189f579392505050565b6000806020838503121561191f57600080fd5b823567ffffffffffffffff8082111561193757600080fd5b818501915085601f83011261194b57600080fd5b81358181111561195a57600080fd5b8660208260051b850101111561196f57600080fd5b60209290920196919550909350505050565b6000806040838503121561199457600080fd5b50508035926020909101359150565b80356001600160a01b03811681146119ba57600080fd5b919050565b600080604083850312156119d257600080fd5b6119db836119a3565b9150602083013580151581146119f057600080fd5b809150509250929050565b600060208284031215611a0d57600080fd5b6104c8826119a3565b60008060408385031215611a2957600080fd5b611a32836119a3565b9150611a40602084016119a3565b90509250929050565b6000815180845260005b81811015611a6f57602081850181015186830182015201611a53565b506000602082860101526020601f19601f83011685010191505092915050565b60ff60f81b881681526000602060e06020840152611ab060e084018a611a49565b8381036040850152611ac2818a611a49565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015611b1657835183529284019291840191600101611afa565b50909c9b505050505050505050505050565b60008083601f840112611b3a57600080fd5b50813567ffffffffffffffff811115611b5257600080fd5b602083019150836020828501011115611b6a57600080fd5b9250929050565b60008060208385031215611b8457600080fd5b823567ffffffffffffffff811115611b9b57600080fd5b611ba785828601611b28565b90969095509350505050565b60008060008060608587031215611bc957600080fd5b8435935060208501359250604085013567ffffffffffffffff811115611bee57600080fd5b611bfa87828801611b28565b95989497509550505050565b634e487b7160e01b600052603260045260246000fd5b6020808252601d908201527f5374616b696e673a20696e73756666696369656e74206465706f736974000000604082015260600190565b634e487b7160e01b600052604160045260246000fd5b604081528260408201528284606083013760006060848301015260006060601f19601f8601168301019050826020830152949350505050565b604081526000611cb56040830185611a49565b90508260208301529392505050565b600181811c90821680611cd857607f821691505b602082108103611cf857634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60ff81811683821601908111156104cb576104cb611cfe565b601f821115610466576000816000526020600020601f850160051c81016020861015611d565750805b601f850160051c820191505b81811015611d7557828155600101611d62565b505050505050565b815167ffffffffffffffff811115611d9757611d97611c53565b611dab81611da58454611cc4565b84611d2d565b602080601f831160018114611de05760008415611dc85750858301515b600019600386901b1c1916600185901b178555611d75565b600085815260208120601f198616915b82811015611e0f57888601518255948401946001909101908401611df0565b5085821015611e2d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601260045260246000fd5b808201808211156104cb576104cb611cfe565b600082611e7557611e75611e3d565b500490565b600082611e8957611e89611e3d565b500690565b818103818111156104cb576104cb611cfe56fea16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a264697066735822122057ddea58705967f95dd719b1291a1c26f48f1f5098c7783101c5cdc9cb35c6d664736f6c63430008180033", "storage": { "0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00": "0x000000000000000000000000000000000000000000000000ffffffffffffffff" }, diff --git a/monitor/loadgen/stake.go b/monitor/loadgen/stake.go index a782175d0..462b35308 100644 --- a/monitor/loadgen/stake.go +++ b/monitor/loadgen/stake.go @@ -64,7 +64,7 @@ func selfDelegateOnce(ctx context.Context, contract *bindings.Staking, backend * } txOpts.Value = big.NewInt(params.Ether) // 1 ETH (in wei) - tx, err := contract.Delegate(txOpts, validator, validator) + tx, err := contract.Delegate(txOpts, validator) if err != nil { return errors.Wrap(err, "deposit") }