60a0604052348015600e575f80fd5b506040516143b63803806143b6833981016040819052602b91603b565b6001600160a01b03166080526066565b5f60208284031215604a575f80fd5b81516001600160a01b0381168114605f575f80fd5b9392505050565b60805161432a61008c5f395f8181610a6801528181610c1a0152610d3e015261432a5ff3fe6080604052600436106100d7575f3560e01c8062fdd58e146100db57806301ffc9a714610121578063266601a3146101505780632eb2c2d61461017d5780633cc3c1da1461019e5780633f8e156e146101dd5780634e1273f414610232578063a22cb4651461025e578063a734bda81461027d578063ac9650d8146102b6578063c035e242146102d6578063caa9a08d146102f5578063d348799714610336578063e53dec3814610355578063e985e9c514610374578063f242432a146103ad578063fa461e33146103cc578063fdf90cc1146103eb575b5f80fd5b3480156100e6575f80fd5b5061010e6100f536600461357c565b5f60208181529281526040808220909352908152205481565b6040519081526020015b60405180910390f35b34801561012c575f80fd5b5061014061013b3660046135bb565b61040a565b6040519015158152602001610118565b34801561015b575f80fd5b5061016f61016a3660046135f8565b610440565b604051610118929190613648565b348015610188575f80fd5b5061019c6101973660046136fc565b610506565b005b3480156101a9575f80fd5b506101bd6101b83660046137bc565b6105aa565b604080516001600160801b03938416815292909116602083015201610118565b3480156101e8575f80fd5b5061021a6101f736600461383c565b6001600160401b03165f908152600360205260409020546001600160a01b031690565b6040516001600160a01b039091168152602001610118565b34801561023d575f80fd5b5061025161024c366004613862565b610784565b60405161011891906138cc565b348015610269575f80fd5b5061019c61027836600461391b565b610872565b348015610288575f80fd5b5061029c610297366004613952565b6108dd565b60408051600f93840b81529190920b602082015201610118565b6102c96102c43660046139b6565b610942565b6040516101189190613a22565b3480156102e1575f80fd5b5061019c6102f0366004613a95565b610a4f565b348015610300575f80fd5b5061032961030f366004613add565b6001600160a01b03165f9081526002602052604090205490565b6040516101189190613af8565b348015610341575f80fd5b5061019c610350366004613b0c565b610c05565b348015610360575f80fd5b5061010e61036f366004613952565b610c80565b34801561037f575f80fd5b5061014061038e366004613b4e565b600160209081525f928352604080842090915290825290205460ff1681565b3480156103b8575f80fd5b5061019c6103c7366004613b7a565b610ccc565b3480156103d7575f80fd5b5061019c6103e6366004613b0c565b610d29565b3480156103f6575f80fd5b5061016f6104053660046135f8565b610daa565b5f6301ffc9a760e01b6001600160e01b03198316148061043a5750636cdb3d1360e11b6001600160e01b03198316145b92915050565b610448613547565b5f681face81baddeadbeef805c159030905d806104805760405162461bcd60e51b815260040161047790613bf0565b60405180910390fd5b6104943388886001600160801b0316610e4d565b86336001600160a01b03167f23833bcc608a225445893342669a9bc035de4ef96cc1edd47cead470f1f7817a886040516104ce9190613c14565b60405180910390a36104ec8585886104e58b610ebc565b6001610f5d565b925092505f681face81baddeadbeef5d5094509492505050565b681face81baddeadbeef805c159030905d806105345760405162461bcd60e51b815260040161047790613bf0565b5f5b868110156105825761057a8a8a8a8a8581811061055557610555613c28565b9050602002013589898681811061056e5761056e613c28565b905060200201356111a5565b600101610536565b506105938989898989898989611311565b5f681face81baddeadbeef5d505050505050505050565b5f805f89898989896040516020016105c6959493929190613c3c565b60408051601f1981840301815291815281516020928301205f81815260049093529082205490925080627fffff600289900b12801561060d57506001600160801b03811615155b1561073857604051633f63910160e01b81526001600160a01b038e166004820152600289810b60248301528b810b60448301528a900b60648201526001600160801b03821660848201525f908e908c908c908490736f08137de8e0b5e51c47a6f6feda08b23809437f90633f6391019060a401602060405180830381865af415801561069b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106bf9190613c78565b5f8a8152600760205260409020549091506106db90829061152b565b9450505050505f806106ed85846115c8565b5f89815260056020908152604080832054600690925290912054929450909250610719918490846116d7565b909250905060018a1461072c578061072e565b815b9550505050610765565b86600114610753575f84815260066020526040902054610762565b5f848152600560205260409020545b92505b826107708460801c90565b955095505050505097509795505050505050565b6060836001600160401b0381111561079e5761079e613c8f565b6040519080825280602002602001820160405280156107c7578160200160208202803683370190505b5090505f5b84811015610869575f808787848181106107e8576107e8613c28565b90506020020160208101906107fd9190613add565b6001600160a01b03166001600160a01b031681526020019081526020015f205f85858481811061082f5761082f613c28565b9050602002013581526020019081526020015f205482828151811061085657610856613c28565b60209081029190910101526001016107cc565b50949350505050565b335f8181526001602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b5f805f60075f89898989896040516020016108fc959493929190613c3c565b6040516020818303038152906040528051906020012081526020019081526020015f205490506109298190565b92506109358160801d90565b9150509550959350505050565b6060816001600160401b0381111561095c5761095c613c8f565b60405190808252806020026020018201604052801561098f57816020015b606081526020019060019003908161097a5790505b5090505f5b82811015610a48575f80308686858181106109b1576109b1613c28565b90506020028101906109c39190613ca3565b6040516109d1929190613ce5565b5f60405180830381855af49150503d805f8114610a09576040519150601f19603f3d011682016040523d82523d5f602084013e610a0e565b606091505b509150915081610a2057805160208201fd5b80848481518110610a3357610a33613c28565b60209081029190910101525050600101610994565b5092915050565b604051630b4c774160e11b81525f906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690631698ee8290610aa190879087908790600401613cf4565b602060405180830381865afa158015610abc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ae09190613d1c565b90506001600160a01b038116610b09576040516313cd87f960e21b815260040160405180910390fd5b6001600160a01b0381165f9081526002602052604090205415610b2c5750505050565b5f610b36826117f5565b90505b6001600160401b0381165f908152600360205260409020546001600160a01b031615610b7b576001810165ffffffffffff1661ffff60301b8216019050610b39565b6001600160401b0381165f81815260036020908152604080832080546001600160a01b0319166001600160a01b038816908117909155808452600290925291829020600160ff1b909301909255517f3654b0c992a12c00b4785d4fe3fd2daaee83dfb9c0c1da4f2f87edb43de3512190610bf6908490613af8565b60405180910390a25050505050565b5f610c1282840184613d6b565b9050610c42337f0000000000000000000000000000000000000000000000000000000000000000835f015161187d565b8415610c5c578051516020820151610c5c91903388611923565b8315610c7957610c79815f01516020015182602001513387611923565b5050505050565b5f60045f8787878787604051602001610c9d959493929190613c3c565b6040516020818303038152906040528051906020012081526020019081526020015f2054905095945050505050565b681face81baddeadbeef805c159030905d80610cfa5760405162461bcd60e51b815260040161047790613bf0565b610d06878787876111a5565b610d1487878787878761197c565b5f681face81baddeadbeef5d50505050505050565b5f610d3682840184613d6b565b9050610d66337f0000000000000000000000000000000000000000000000000000000000000000835f015161187d565b5f808613610d7957815160200151610d7d565b8151515b90505f808713610d8d5785610d8f565b865b9050610da18284602001513384611923565b50505050505050565b610db2613547565b5f681face81baddeadbeef805c159030905d80610de15760405162461bcd60e51b815260040161047790613bf0565b610df53388886001600160801b0316611b11565b86336001600160a01b03167f16695fc037c20a8984b20ffc7aadd6ce10e62756f9ca42933a1aa6459ef064ca88604051610e2f9190613c14565b60405180910390a3610e4087611c1f565b6104ec8585888a5f610f5d565b6001600160a01b0383165f9081526020818152604080832085845290915281208054839290610e7d908490613e2e565b909155505060408051838152602081018390525f916001600160a01b0386169133915f805160206142d5833981519152910160405180910390a4505050565b5f727f00000000007f00000000007f00000000007f60411b8216600160401b811015610ee957505f610f29565b600160701b811015610efd57506001610f29565b600160a01b811015610f1157506002610f29565b600160d01b811015610f2557506003610f29565b5060045b6001600160401b031981600403603002720100000000000100000000000100000000000160481b901c168318915050919050565b610f65613547565b6001600160401b0383165f908152600360205260408120546001600160a01b031680610fa4576040516313cd87f960e21b815260040160405180910390fd5b5f805f80610fb189611ed7565b90505f5b81811015611064575f610fc98b838e611f4d565b9050610fd481611fb6565b86019550610fe181612028565b850194505f610ff3888d85858f61206f565b8b856004811061100557611005613c28565b60200201529050611016898261221b565b98506110556110258d8561228c565b1561103b57611036825b5f906122a2565b61104e565b61104e6110488360801d90565b60801b90565b869061221b565b94508260010192505050610fb5565b50611077600460016001607f1b03613e41565b6001600160801b03168411806110a6575061109a600460016001607f1b03613e41565b6001600160801b031683115b156110c457604051630543a6e160e41b815260040160405180910390fd5b8a60020b8c60020b13156110f35781156110ef576110ec866110e687856122bc565b9061221b565b95505b999a995b5f856001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa158015611130573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111549190613e7f565b50505050509150508b60020b8160020b12158061117757508c60020b8160020b13155b1561119557604051631fa4d92560e31b815260040160405180910390fd5b5050505050509550959350505050565b6001600160401b0382165f908152600360205260408120546001600160a01b0316906111d084611ed7565b90505f5b81811015610da1575f6111e8868387611f4d565b90505f84896111f7898661228c565b6112018560e81c90565b61120b8660d01c90565b60405160200161121f959493929190613c3c565b60408051601f19818403018152919052805160209091012090505f85896112468a8761228c565b6112508660e81c90565b61125a8760d01c90565b60405160200161126e959493929190613c3c565b60408051601f1981840301815291815281516020928301205f8581526004909352818320548184529190922054919250901515806112b55750836001600160801b03168114155b156112d3576040516312171d8360e31b815260040160405180910390fd5b5f82815260046020908152604080832093909355848252828220829055600790528181208054938252918120929092559181529055506001016111d4565b336001600160a01b038916148061134a57506001600160a01b0388165f90815260016020908152604080832033845290915290205460ff165b6113675760405163ea8e4eb560e01b815260040160405180910390fd5b5f805f5b8781101561140f5788888281811061138557611385613c28565b9050602002013592508686828181106113a0576113a0613c28565b6001600160a01b038e165f90815260208181526040808320898452825282208054939091029490940135955085939250906113dc908490613e2e565b90915550506001600160a01b038a165f90815260208181526040808320868452909152902080548301905560010161136b565b50886001600160a01b03168a6001600160a01b0316336001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8b8b8b8b6040516114639493929190613f41565b60405180910390a46001600160a01b0389163b1561151f5760405163bc197c8160e01b808252906001600160a01b038b169063bc197c81906114b79033908f908e908e908e908e908e908e90600401613f8f565b6020604051808303815f875af11580156114d3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114f79190613fe3565b6001600160e01b0319161461151f57604051633da6393160e01b815260040160405180910390fd5b50505050505050505050565b5f806115378360801d90565b600f0b6115448560801d90565b600f0b039050805f84600f0b86600f0b0390505f8190508383600f0b14158061157057508181600f0b14155b1561158e57604051633486405d60e21b815260040160405180910390fd5b6115bd61159e84600f0b5f612600565b6115b56115ae84600f0b5f612600565b88906122a2565b9060801b0190565b979650505050505050565b5f805f6115d58560801c90565b6001600160801b03908116915085168082015f808781608082901c905061160f826001600160801b031686600160401b026002890a612615565b935061162e816001600160801b031686600160401b026002890a612615565b92505f915081905060048704860161164f61164a868389612615565b6126bf565b925061165f61164a858389612615565b91506116758261166f5f866126df565b906126fb565b99505f925082915081905060046002890a048887026002880a030190506116a361164a868360028a0a612615565b92506116b661164a858360028a0a612615565b91506116c68261166f5f866126df565b985050505050505050509250929050565b5f80806116fd865b6001600160801b0316885b6001600160801b031661164a9190614012565b90505f61172061170d8860801c90565b6001600160801b03166116ea8a60801c90565b90505f61172c866116df565b90505f61173c61170d8860801c90565b90505f6001600160801b03858116148061175e57506001600160801b03838116145b1590505f6001600160801b03858116148061178157506001600160801b03838116145b1590506117b48161179b576117968d60801c90565b61179d565b855b61166f846117ab578e6117ad565b885b5f906126df565b6117e2826117cb576117c68c60801c90565b6117cd565b845b61166f856117db578d6117ad565b5f886126df565b9750975050505050505094509492505050565b5f80826001600160a01b031663d0c93a7c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611833573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118579190614025565b60709390931c65ffffffffffff1660309390931b62ffffff60301b169290920192915050565b805160208201516040808401519051630b4c774160e11b81526001600160a01b038088169490871693631698ee82936118b893600401613cf4565b602060405180830381865afa1580156118d3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118f79190613d1c565b6001600160a01b03161461191e57604051633a94c70560e01b815260040160405180910390fd5b505050565b5f6040516323b872dd60e01b815284816004015283816024015282816044015260205f6064835f8a5af13d15601f3d1160015f511416171691505080610c79576040516312171d8360e31b815260040160405180910390fd5b336001600160a01b03871614806119b557506001600160a01b0386165f90815260016020908152604080832033845290915290205460ff165b6119d25760405163ea8e4eb560e01b815260040160405180910390fd5b6001600160a01b0386165f9081526020818152604080832087845290915281208054859290611a02908490613e2e565b90915550506001600160a01b038581165f818152602081815260408083208984528252918290208054880190558151888152908101879052919289169133915f805160206142d5833981519152910160405180910390a46001600160a01b0385163b15611b095760405163f23a6e6160e01b808252906001600160a01b0387169063f23a6e6190611aa19033908b908a908a908a908a90600401614040565b6020604051808303815f875af1158015611abd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ae19190613fe3565b6001600160e01b03191614611b0957604051633da6393160e01b815260040160405180910390fd5b505050505050565b6001600160a01b0383165f818152602081815260408083208684528252808320805486019055805186815291820185905233915f805160206142d5833981519152910160405180910390a46001600160a01b0383163b1561191e5760405163f23a6e6160e01b8082523360048301525f60248301819052604483018590526064830184905260a0608484015260a4830152906001600160a01b0385169063f23a6e619060c4016020604051808303815f875af1158015611bd3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bf79190613fe3565b6001600160e01b0319161461191e57604051633da6393160e01b815260040160405180910390fd5b611c29815f61270c565b5f03611c4b576040516393db026360e01b815260016004820152602401610477565b77fffffffff200fffffffff200fffffffff200fffffffff200604082901c165f5b600481101561191e57611c7f838261270c565b5f03611cb0576040603082020183901c1561191e576040516393db026360e01b815260016004820152602401610477565b5f611cba84611ed7565b9050600182015b81811015611d10578060300284901c65ffffffffffff168360300285901c65ffffffffffff1603611d08576040516393db026360e01b815260066004820152602401610477565b600101611cc1565b50611d1b848361271e565b60020b5f03611d40576040516393db026360e01b815260056004820152602401610477565b620d89e719611d548584603002604c011c90565b60020b1480611d765750620d89e8611d718584603002604c011c90565b60020b145b15611d96576040516393db026360e01b8152600481810152602401610477565b5f611da18584612731565b9050828114611ecd5782611db58683612731565b14611dd6576040516393db026360e01b815260036004820152602401610477565b611de08584612743565b611dea8683612743565b141580611e095750611dfc858461270c565b611e06868361270c565b14155b15611e2a576040516393db026360e01b815260036004820152602401610477565b5f611e358685612755565b90505f611e428784612755565b90505f611e4f888761228c565b90505f611e5c898661228c565b90508284148015611e6c57508082145b15611e8c576040516393db026360e01b8152600481810152602401610477565b8284141580611e9b5750836001145b8015611ea75750808214155b15611ec8576040516393db026360e01b815260056004820152602401610477565b505050505b5050600101611c6c565b5f727f00000000007f00000000007f00000000007f60411b8216600160401b811015611f0557505f92915050565b600160701b811015611f1a5750600192915050565b600160a01b811015611f2f5750600292915050565b600160d01b811015611f445750600392915050565b50600492915050565b5f8080611f5a8686612767565b90925090505f611f6a878761270c565b611f7d906001600160801b038716614086565b9050611f898787612743565b5f03611fa457611f9a83838361279e565b9350505050611faf565b611f9a83838361282e565b9392505050565b5f80611fca611fc58460e81c90565b612869565b90505f611fda611fc58560d01c90565b90506001600160a01b0382166120126060866001600160801b0316901b8484036001600160a01b0316846001600160a01b0316612615565b8161201f5761201f613ffe565b04949350505050565b5f80612037611fc58460e81c90565b90505f612047611fc58560d01c90565b9050612067846001600160801b03168383036001600160a01b0316612b79565b949350505050565b5f8080873361207e898961228c565b6120888860e81c90565b6120928960d01c90565b6040516020016120a6959493929190613c3c565b60408051601f19818403018152919052805160209091012090505f806120cc8989612755565b5f848152600460205260408120549192508190608082901c9050896001600160801b0381165f0361211057604051630200e8a960e31b815260040160405180910390fd5b845f0361213b57612121818461409d565b955089156121365761213381836140bc565b91505b612185565b806001600160801b0316836001600160801b0316101561216e57604051634323a55560e01b815260040160405180910390fd5b80830395508961218557612182818361409d565b91505b612199866121935f856126fb565b906126df565b5f888152600460205260409020555050821590506121c0576121bb888c612bd7565b6121ca565b6121ca888c612c9f565b95506001600160801b038116156121ec576121e9888c83878a87612ebc565b94505b6121f98b848a6001613037565b5f94855260076020526040909420939093555092989197509095505050505050565b5f806122278360801d90565b600f0b6122348560801d90565b600f0b019050805f84600f0b86600f0b0190505f8190508383600f0b14158061226057508181600f0b14155b1561227e57604051633486405d60e21b815260040160405180910390fd5b6115bd836115b587846122a2565b5f60026049603084020184901c5b069392505050565b6001600160801b0319821691016001600160801b03160190565b5f80806060858583608082901d905060405180604001604052806040518060600160405280866001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561231d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123419190613d1c565b6001600160a01b03168152602001866001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561238b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123af9190613d1c565b6001600160a01b03168152602001866001600160a01b031663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123f9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061241d91906140db565b62ffffff16905281523360209182015260405161243b9291016140f6565b604051602081830303815290604052935081600f0b5f14158015612462575080600f0b5f14155b156124f6575f836001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa1580156124a4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124c89190613e7f565b50505050505090505f6124de83600f0b83613166565b84600f0b0390505f81129750805f0396505050612526565b81600f0b5f14612515575f82600f0b129550815f03600f0b9450612526565b5f81600f0b139550805f03600f0b94505b845f0361253b575f965050505050505061043a565b5f80846001600160a01b031663128acb08338a8a8c61256e5773fffd8963efd1fc6a506488495d951d5263988d25612575565b6401000276a45b8b6040518663ffffffff1660e01b8152600401612596959493929190614136565b60408051808303815f875af11580156125b1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125d59190614170565b915091506125f16125e5826131f3565b6115b561102f856131f3565b9b9a5050505050505050505050565b5f81831361260e5781611faf565b5090919050565b5f80805f19858709858702925082811083820303915050805f03612649575f841161263e575f80fd5b508290049050611faf565b808411612654575f80fd5b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b806001600160801b03811681146126da57506001600160801b035b919050565b81016001600160801b03166001600160801b0319919091160190565b60801b6001600160801b0319160190565b5f60806041603084020184901c61229a565b5f6110006064603084020184901c61229a565b5f6004604a603084020184901c61229a565b5f60026040603084020184901c61229a565b5f60026048603084020184901c61229a565b5f8061279361277b8585603002604c011c90565b612785868661271e565b603087901c61ffff16613218565b909590945092505050565b5f806127a985612869565b90505f6127b585612869565b905061282486866127f56127f0886127df876001600160a01b0316896001600160a01b0316612b79565b8888036001600160a01b0316612615565b6132f6565b6001600160e81b031960e884901b1662ffffff60d01b60d084901b16016001600160801b038216019392505050565b9695505050505050565b5f8061283985612869565b90505f61284585612869565b905061282486866127f56127f088600160601b8888036001600160a01b0316612615565b5f805f8360020b1261287e578260020b612885565b8260020b5f035b9050620d89e88111156128ab576040516333a3bdff60e21b815260040160405180910390fd5b5f816001165f036128c057600160801b6128d2565b6ffffcb933bd6fad37aa2d162d1a5940015b6001600160881b0316905060028216156128fc576ffff97272373d413259a46990580e213a0260801c5b600482161561291b576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b600882161561293a576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615612959576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615612978576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615612997576fff2ea16466c96a3843ec78b326b528610260801c5b60808216156129b6576ffe5dee046a99a2a811c461f1969c30530260801c5b6101008216156129d6576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b6102008216156129f6576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615612a16576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615612a36576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615612a56576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615612a76576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615612a96576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615612ab6576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615612ad7576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615612af7576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615612b16576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615612b33576b048a170391f7dc42444e8fa20260801c5b5f8460020b1315612b5257805f1981612b4e57612b4e613ffe565b0490505b600160201b810615612b65576001612b67565b5f5b60ff16602082901c0192505050919050565b5f80805f19848609848602925082811083820303915050805f03612ba2575060601c905061043a565b80600160601b11612bb1575f80fd5b5f600160601b85870980840360601c9310909103600160a01b0291909117949350505050565b5f805f836001600160a01b031663a34123a7612bf38760e81c90565b612bfd8860d01c90565b886040516001600160e01b031960e086901b168152600293840b60048201529190920b60248201526001600160801b03909116604482015260640160408051808303815f875af1158015612c53573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c779190614170565b91509150612c96815f036115b5845f035f6122a290919063ffffffff16565b95945050505050565b5f8060405180604001604052806040518060600160405280866001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cf3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d179190613d1c565b6001600160a01b03168152602001866001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d61573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d859190613d1c565b6001600160a01b03168152602001866001600160a01b031663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015612dcf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612df391906140db565b62ffffff169052815233602091820152604051612e119291016140f6565b60405160208183030381529060405290505f80846001600160a01b0316633c8a7d8d30612e3e8960e81c90565b612e488a60d01c90565b8a886040518663ffffffff1660e01b8152600401612e6a959493929190614192565b60408051808303815f875af1158015612e85573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ea99190614170565b9092509050612824816115b55f856122a2565b5f8381526007602052604081205485908290612ee490612ede8a858d86613037565b9061152b565b905083600103612efb57612ef88186613320565b90505b801561302b575f80896001600160a01b0316634f1eb3d833612f1d8e60e81c90565b612f278f60d01c90565b87612f328960801d90565b6040516001600160e01b031960e088901b1681526001600160a01b039095166004860152600293840b60248601529190920b60448401526001600160801b03918216606484015216608482015260a40160408051808303815f875af1158015612f9d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612fc191906141d6565b915091505f805f612fcf8a90565b600f0b12612fdd5783612fe1565b8884015b91505f612fee8a60801d90565b600f0b12612ffc5782613009565b6130068960801d90565b83015b90506130198161166f5f856126df565b96506130268a8c89613380565b505050505b50509695505050505050565b5f805f866001600160a01b031663514ea4bf306130548860e81c90565b61305e8960d01c90565b60405160609390931b6001600160601b031916602084015260e891821b6034840152901b6037820152603a01604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004016130be91815260200190565b60a060405180830381865afa1580156130d9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130fd9190614203565b505092509250508361313a5761313561311f82886001600160801b03166133da565b6115b561102f858a6001600160801b03166133da565b6115bd565b6115bd61315082886001600160801b0316613438565b6115b561102f858a6001600160801b0316613438565b5f6001600160801b036001600160a01b03831610156131c6575f6131ab6131a661318f86613469565b600160c01b6002876001600160a01b03160a612615565b61347d565b90505f84126131ba57806131be565b805f035b91505061043a565b5f6131ab6131a66131d686613469565b600160801b6131ee6001600160a01b038816806134a6565b612615565b80600f81900b81146126da5760405163b668004560e01b815260040160405180910390fd5b5f808083600281900b620d89e7198161323357613233613ffe565b050290505f84600281900b620d89e88161324f5761324f613ffe565b050290505f8061325f8888613504565b818b0397508a810196509092509050600287810b9087900b8161328457613284613ffe565b0760020b1515806132ac57508660020b8560020b816132a5576132a5613ffe565b0760020b15155b806132bc57508360020b8660020b125b806132cc57508260020b8560020b135b156132ea5760405163c82825f560e01b815260040160405180910390fd5b50505050935093915050565b806001600160801b03811681146126da5760405163b668004560e01b815260040160405180910390fd5b5f8061332c8360801d90565b600f0b6133398560801d90565b600f0b039050805f84600f0b86600f0b0390505f8190508383600f0b14158061226057508181600f0b1461227e57604051633486405d60e21b815260040160405180910390fd5b5f8061338c84846115c8565b5f878152600560209081526040808320546006909252909120549294509092506133b8918490846116d7565b5f96875260056020908152604080892060069092529097205590945550505050565b5f80805f19848609848602925082811083820303915050805f03613403575060801c905061043a565b80600160801b11613412575f80fd5b5f600160801b85870980840360801c9310909103600160801b0291909117949350505050565b5f61344383836133da565b90505f600160801b838509111561043a575f198110613460575f80fd5b60010192915050565b5f80821361347957815f0361043a565b5090565b5f6001600160ff1b038211156134795760405163b668004560e01b815260040160405180910390fd5b5f80805f19848609848602925082811083820303915050805f036134cf575060401c905061043a565b80600160401b116134de575f80fd5b5f600160401b85870980840360401c9310909103600160c01b0291909117949350505050565b5f8060026135128486614253565b61351c9190614272565b61353b61352985876142b6565b62ffffff166002808204910615150190565b915091505b9250929050565b60405180608001604052806004906020820280368337509192915050565b6001600160a01b0381168114613579575f80fd5b50565b5f806040838503121561358d575f80fd5b823561359881613565565b946020939093013593505050565b6001600160e01b031981168114613579575f80fd5b5f602082840312156135cb575f80fd5b8135611faf816135a6565b6001600160801b0381168114613579575f80fd5b8060020b8114613579575f80fd5b5f805f806080858703121561360b575f80fd5b84359350602085013561361d816135d6565b9250604085013561362d816135ea565b9150606085013561363d816135ea565b939692955090935050565b60a0810181845f5b600481101561366f578151835260209283019290910190600101613650565b5050508260808301529392505050565b5f8083601f84011261368f575f80fd5b5081356001600160401b038111156136a5575f80fd5b6020830191508360208260051b8501011115613540575f80fd5b5f8083601f8401126136cf575f80fd5b5081356001600160401b038111156136e5575f80fd5b602083019150836020828501011115613540575f80fd5b5f805f805f805f8060a0898b031215613713575f80fd5b883561371e81613565565b9750602089013561372e81613565565b965060408901356001600160401b03811115613748575f80fd5b6137548b828c0161367f565b90975095505060608901356001600160401b03811115613772575f80fd5b61377e8b828c0161367f565b90955093505060808901356001600160401b0381111561379c575f80fd5b6137a88b828c016136bf565b999c989b5096995094979396929594505050565b5f805f805f805f60e0888a0312156137d2575f80fd5b87356137dd81613565565b965060208801356137ed81613565565b9550604088013594506060880135613804816135ea565b93506080880135613814816135ea565b925060a0880135613824816135ea565b96999598509396929591949193505060c09091013590565b5f6020828403121561384c575f80fd5b81356001600160401b0381168114611faf575f80fd5b5f805f8060408587031215613875575f80fd5b84356001600160401b0381111561388a575f80fd5b6138968782880161367f565b90955093505060208501356001600160401b038111156138b4575f80fd5b6138c08782880161367f565b95989497509550505050565b602080825282518282018190525f918401906040840190835b818110156139035783518352602093840193909201916001016138e5565b509095945050505050565b8015158114613579575f80fd5b5f806040838503121561392c575f80fd5b823561393781613565565b915060208301356139478161390e565b809150509250929050565b5f805f805f60a08688031215613966575f80fd5b853561397181613565565b9450602086013561398181613565565b9350604086013592506060860135613998816135ea565b915060808601356139a8816135ea565b809150509295509295909350565b5f80602083850312156139c7575f80fd5b82356001600160401b038111156139dc575f80fd5b6139e88582860161367f565b90969095509350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015613a7957603f19878603018452613a648583516139f4565b94506020938401939190910190600101613a48565b50929695505050505050565b62ffffff81168114613579575f80fd5b5f805f60608486031215613aa7575f80fd5b8335613ab281613565565b92506020840135613ac281613565565b91506040840135613ad281613a85565b809150509250925092565b5f60208284031215613aed575f80fd5b8135611faf81613565565b6001600160401b0391909116815260200190565b5f805f8060608587031215613b1f575f80fd5b843593506020850135925060408501356001600160401b03811115613b42575f80fd5b6138c0878288016136bf565b5f8060408385031215613b5f575f80fd5b8235613b6a81613565565b9150602083013561394781613565565b5f805f805f8060a08789031215613b8f575f80fd5b8635613b9a81613565565b95506020870135613baa81613565565b9450604087013593506060870135925060808701356001600160401b03811115613bd2575f80fd5b613bde89828a016136bf565b979a9699509497509295939492505050565b6020808252600a90820152695245454e5452414e435960b01b604082015260600190565b6001600160801b0391909116815260200190565b634e487b7160e01b5f52603260045260245ffd5b6001600160601b0319606096871b811682529490951b9093166014850152602884019190915260e890811b60488401521b604b820152604e0190565b5f60208284031215613c88575f80fd5b5051919050565b634e487b7160e01b5f52604160045260245ffd5b5f808335601e19843603018112613cb8575f80fd5b8301803591506001600160401b03821115613cd1575f80fd5b602001915036819003821315613540575f80fd5b818382375f9101908152919050565b6001600160a01b03938416815291909216602082015262ffffff909116604082015260600190565b5f60208284031215613d2c575f80fd5b8151611faf81613565565b604051606081016001600160401b0381118282101715613d6557634e487b7160e01b5f52604160045260245ffd5b60405290565b5f818303608081128015613d7d575f80fd5b50604080519081016001600160401b0381118282101715613dac57634e487b7160e01b5f52604160045260245ffd5b6040526060821215613dbc575f80fd5b613dc4613d37565b91508335613dd181613565565b82526020840135613de181613565565b60208301526040840135613df481613a85565b6040830152908152606083013590613e0b82613565565b60208101919091529392505050565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561043a5761043a613e1a565b600f82810b9082900b0360016001607f1b0319811260016001607f1b038213171561043a5761043a613e1a565b805161ffff811681146126da575f80fd5b5f805f805f805f60e0888a031215613e95575f80fd5b8751613ea081613565565b6020890151909750613eb1816135ea565b9550613ebf60408901613e6e565b9450613ecd60608901613e6e565b9350613edb60808901613e6e565b925060a088015160ff81168114613ef0575f80fd5b60c0890151909250613f018161390e565b8091505092959891949750929550565b8183525f6001600160fb1b03831115613f28575f80fd5b8260051b80836020870137939093016020019392505050565b604081525f613f54604083018688613f11565b82810360208401526115bd818587613f11565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b6001600160a01b0389811682528816602082015260a0604082018190525f90613fbb908301888a613f11565b8281036060840152613fce818789613f11565b905082810360808401526125f1818587613f67565b5f60208284031215613ff3575f80fd5b8151611faf816135a6565b634e487b7160e01b5f52601260045260245ffd5b8082018082111561043a5761043a613e1a565b5f60208284031215614035575f80fd5b8151611faf816135ea565b6001600160a01b03878116825286166020820152604081018590526060810184905260a0608082018190525f9061407a9083018486613f67565b98975050505050505050565b808202811582820484141761043a5761043a613e1a565b6001600160801b03818116838216019081111561043a5761043a613e1a565b6001600160801b03828116828216039081111561043a5761043a613e1a565b5f602082840312156140eb575f80fd5b8151611faf81613a85565b815180516001600160a01b03908116835260208083015182168185015260409283015162ffffff1692840192909252920151909116606082015260800190565b6001600160a01b0386811682528515156020830152604082018590528316606082015260a0608082018190525f906115bd908301846139f4565b5f8060408385031215614181575f80fd5b505080516020909101519092909150565b6001600160a01b0386168152600285810b602083015284900b60408201526001600160801b038316606082015260a0608082018190525f906115bd908301846139f4565b5f80604083850312156141e7575f80fd5b82516141f2816135d6565b6020840151909250613947816135d6565b5f805f805f60a08688031215614217575f80fd5b8551614222816135d6565b6020870151604088015160608901519297509095509350614242816135d6565b60808701519092506139a8816135d6565b5f8260020b8260020b028060020b9150808214610a4857610a48613e1a565b5f8160020b8360020b8061429457634e487b7160e01b5f52601260045260245ffd5b627fffff1982145f19821416156142ad576142ad613e1a565b90059392505050565b62ffffff8181168382160290811690818114610a4857610a48613e1a56fec3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62a264697066735822122048347a152bd715d53631ed41d7c1ed22710d5f7e230bba4fa936b5a460a7debe64736f6c634300081a00330000000000000000000000000227628f3f023bb0b980b67d528571c95c6dac1c