0x6101e06040523480156200001257600080fd5b5060405162002b4038038062002b4083398101604081905262000035916200021e565b604080518082018252600f81526e2634b8bab4b234ba3ca437b63232b960891b602080830191909152825180840190935260038352620312e360ec1b9083015290620000838260006200017c565b61012052620000948160016200017c565b61014052815160208084019190912060e052815190820120610100524660a0526200012260e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c05260016002556001600160a01b0395861661016052938516610180529184166101a05283166101c052600380549184166001600160a01b03199283161790556004805492909316911617905562000485565b60006020835110156200019c576200019483620001b5565b9050620001af565b81620001a9848262000344565b5060ff90505b92915050565b600080829050601f81511115620001ec578260405163305a27a960e01b8152600401620001e3919062000410565b60405180910390fd5b8051620001f98262000460565b179392505050565b80516001600160a01b03811681146200021957600080fd5b919050565b60008060008060008060c087890312156200023857600080fd5b620002438762000201565b9550620002536020880162000201565b9450620002636040880162000201565b9350620002736060880162000201565b9250620002836080880162000201565b91506200029360a0880162000201565b90509295509295509295565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620002ca57607f821691505b602082108103620002eb57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200033f57600081815260208120601f850160051c810160208610156200031a5750805b601f850160051c820191505b818110156200033b5782815560010162000326565b5050505b505050565b81516001600160401b038111156200036057620003606200029f565b6200037881620003718454620002b5565b84620002f1565b602080601f831160018114620003b05760008415620003975750858301515b600019600386901b1c1916600185901b1785556200033b565b600085815260208120601f198616915b82811015620003e157888601518255948401946001909101908401620003c0565b5085821015620004005787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208083528351808285015260005b818110156200043f5785810183015185820160400152820162000421565b506000604082860101526040601f19601f8301168501019250505092915050565b80516020808301519190811015620002eb5760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516126036200053d6000396000818161018e015281816104c9015281816105360152610a6c01526000818161021c0152610a4b015260008181610167015281816105150152610c0201526000818161025601526103480152600061065a0152600061063001526000611ad401526000611aac01526000611a0701526000611a3101526000611a5b01526126036000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806397fc007c1161008c578063c31c9c0711610066578063c31c9c0714610217578063c69bebe41461023e578063e78cea9214610251578063f11b81881461027857600080fd5b806397fc007c146101de578063a480ca79146101f1578063b3f006741461020457600080fd5b8063791b98bc116100c8578063791b98bc146101625780637bf1a6271461018957806384b0196e146101b0578063917659ee146101cb57600080fd5b80632b7ac3f3146100ef57806330b8b2c61461011f5780633dd5c7421461014d575b600080fd5b600354610102906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61013261012d366004611f6e565b6102a7565b60408051938452602084019290925290820152606001610116565b61016061015b366004611f8b565b610335565b005b6101027f000000000000000000000000000000000000000000000000000000000000000081565b6101027f000000000000000000000000000000000000000000000000000000000000000081565b6101b8610622565b6040516101169796959493929190612010565b6101606101d93660046120ec565b6106aa565b6101606101ec366004611f6e565b610b2a565b6101606101ff366004611f6e565b610b97565b600454610102906001600160a01b031681565b6101027f000000000000000000000000000000000000000000000000000000000000000081565b61016061024c366004611f6e565b610c40565b6101027f000000000000000000000000000000000000000000000000000000000000000081565b610132610286366004611f6e565b60056020526000908152604090208054600182015460029092015490919083565b6001600160a01b0381166000818152600560209081526040808320805460019091015482516319e209a560e21b8152925191959094938793919263678826949260048082019392918290030181865afa158015610308573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061032c9190612196565b93959294505050565b61033d610cad565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146103ba5760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792063616c6c61626c652062792062726964676520636f6e747261637460448201526064015b60405180910390fd5b6040516370a0823160e01b815230600482015283906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610403573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104279190612196565b9050600081116104695760405162461bcd60e51b815260206004820152600d60248201526c27379036b2b6b2903a37b5b2b760991b60448201526064016103b1565b816001600160a01b03166303f515786040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156104a457600080fd5b505af11580156104b8573d6000803e3d6000fd5b506104f39250506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169050333086610d04565b600060646105028660216121c5565b61050c91906121f2565b9050600061055d7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000898587610d75565b604051634ff6199760e11b8152600060048201529091506001600160a01b03851690639fec332e90602401600060405180830381600087803b1580156105a257600080fd5b505af11580156105b6573d6000803e3d6000fd5b50505050604051806060016040528087815260200183876105d79190612206565b81526020908101929092526001600160a01b0388166000908152600583526040908190208251815592820151600184015501516002909101555061061d91506112de9050565b505050565b6000606080828080836106557f0000000000000000000000000000000000000000000000000000000000000000836112e5565b6106807f000000000000000000000000000000000000000000000000000000000000000060016112e5565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b6106b2610cad565b81516020808401516001600160a01b0383166000908152600590925260409091206001015461072e5760405162461bcd60e51b815260206004820152602260248201527f4d656d65206e6f7420666f756e64206f7220696e73756666696369656e7420456044820152610a8960f31b60648201526084016103b1565b6000811161077e5760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e744f75744d696e696d756d2063616e206e6f74207a65726f00000060448201526064016103b1565b60008290506000816001600160a01b031663678826946040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107e79190612196565b9050804210156108395760405162461bcd60e51b815260206004820152601760248201527f4e6f74207965742074696d6520746f206578656375746500000000000000000060448201526064016103b1565b61084581610258612219565b4210156108cd5780866040015167ffffffffffffffff1610158015610883575061087181610258612219565b866040015167ffffffffffffffff1611155b6108c35760405162461bcd60e51b81526020600482015260116024820152702830b930b6b9903a34b6b29032b93937b960791b60448201526064016103b1565b6108cd8686611392565b6000612710836001600160a01b03166305c670736040518163ffffffff1660e01b8152600401602060405180830381865afa158015610910573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109349190612196565b6001600160a01b03871660009081526005602052604090205461095791906121c5565b61096191906121f2565b6001600160a01b0386166000908152600560205260409020600101549091508111156109a557506001600160a01b0384166000908152600560205260409020600101545b6001600160a01b038516600090815260056020526040812060010180548392906109d0908490612206565b90915550506001600160a01b0385811660009081526005602052604090819020600101549051634ff6199760e11b81529015600482015290841690639fec332e90602401600060405180830381600087803b158015610a2e57600080fd5b505af1158015610a42573d6000803e3d6000fd5b50505050610a937f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008784886114e0565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015610ada573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610afe9190612196565b9050610b166001600160a01b03871661dead83611685565b505050505050610b266001600255565b5050565b6003546001600160a01b03163314610b755760405162461bcd60e51b815260206004820152600e60248201526d24b73b30b634b21031b0b63632b960911b60448201526064016103b1565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b610b9f610cad565b6001600160a01b03811660009081526005602052604090206002015480610bf95760405162461bcd60e51b815260206004820152600e60248201526d13595b59481b9bdd08199bdd5b9960921b60448201526064016103b1565b600454610c32907f00000000000000000000000000000000000000000000000000000000000000009083906001600160a01b03166116b5565b50610c3d6001600255565b50565b6004546001600160a01b03163314610c8b5760405162461bcd60e51b815260206004820152600e60248201526d24b73b30b634b21031b0b63632b960911b60448201526064016103b1565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6002805403610cfe5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016103b1565b60028055565b6040516001600160a01b0380851660248301528316604482015260648101829052610d6f9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611770565b50505050565b60405163095ea7b360e01b81526001600160a01b038681166004830152602482018490526000919086169063095ea7b3906044016020604051808303816000875af1158015610dc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dec9190612241565b5060405163095ea7b360e01b81526001600160a01b0387811660048301526024820184905285169063095ea7b3906044016020604051808303816000875af1158015610e3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e609190612241565b50838583856001600160a01b038084169085161115610e855750879250869150859050845b6000610e918383611845565b6040516309f56ab160e11b81526001600160a01b0387811660048301528681166024830152612710604483015280831660648301529192508c918216906313ead562906084016020604051808303816000875af1158015610ef6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1a919061225c565b506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7f919061225c565b604051630b4c774160e11b81526001600160a01b03898116600483015288811660248301526127106044830152919250600091831690631698ee8290606401602060405180830381865afa158015610fdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fff919061225c565b90506001600160a01b03811661104f5760405162461bcd60e51b8152602060048201526015602482015274506f6f6c206164647265737320676f74207a65726f60581b60448201526064016103b1565b6000816001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa15801561108f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b3919061228b565b50505050505090506000816001600160a01b0316116111145760405162461bcd60e51b815260206004820152601d60248201527f466163746f72792073717274507269636558393620676f74207a65726f00000060448201526064016103b1565b6000856001600160a01b0316826001600160a01b03161161113e57611139828761231f565b611148565b611148868361231f565b9050611155600a87612346565b6001600160a01b0316816001600160a01b031611156111b65760405162461bcd60e51b815260206004820152601860248201527f537172745072696365583936206e6f7420636f7272656374000000000000000060448201526064016103b1565b846001600160a01b031663883164566040518061016001604052808d6001600160a01b031681526020018c6001600160a01b0316815260200161271062ffffff16815260200161120b620d89e71960c86118af565b60020b815260200161122a611223620d89e71961236c565b60c86118af565b60020b8152602081018c9052604081018b905260006060820181905260808201523060a082015260c00161125f42600f612219565b8152506040518263ffffffff1660e01b815260040161127e919061238e565b6080604051808303816000875af115801561129d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c19190612452565b909150905050809b50505050505050505050505095945050505050565b6001600255565b606060ff83146112ff576112f8836119bb565b905061138c565b81805461130b9061249c565b80601f01602080910402602001604051908101604052809291908181526020018280546113379061249c565b80156113845780601f1061135957610100808354040283529160200191611384565b820191906000526020600020905b81548152906001019060200180831161136757829003601f168201915b505050505090505b92915050565b42826040015167ffffffffffffffff1610156113e45760405162461bcd60e51b815260206004820152601160248201527014da59db985d1d5c9948195e1c1a5c9959607a1b60448201526064016103b1565b600061146383805160208083015160409384015184517f88ed9da9a05714d28f6ee763e0045298198a502f48bd5d86600189a90ddeaedd818501526001600160a01b0390941684860152606084019190915267ffffffffffffffff166080808401919091528351808403909101815260a0909201909252805191012090565b90506000611487828460000151856020015186604001516114826119fa565b611b2a565b6003549091506001600160a01b03808316911614610d6f5760405162461bcd60e51b815260206004820152601660248201527529b4b3b730ba3ab932903b32b934b33c9032b93937b960511b60448201526064016103b1565b600082116115255760405162461bcd60e51b8152602060048201526012602482015271125b9d985b1a590811551208185b5bdd5b9d60721b60448201526064016103b1565b60405163095ea7b360e01b81526001600160a01b0386811660048301526024820184905285169063095ea7b3906044016020604051808303816000875af1158015611574573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115989190612241565b506040805160e0810182526001600160a01b0386811682528581166020830190815261271083850190815230606085019081526080850188815260a08601888152600060c0880190815297516304e45aaf60e01b8152875187166004820152945186166024860152925162ffffff1660448501529051841660648401525160848301525160a48201529251811660c48401529091908716906304e45aaf9060e4016020604051808303816000875af1158015611658573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061167c9190612196565b50505050505050565b6040516001600160a01b03831660248201526044810182905261061d90849063a9059cbb60e01b90606401610d38565b604080516080810182528381526001600160a01b03838116602083019081526001600160801b0383850181815260608501828152955163fc6f786560e01b81528551600482015292518416602484015251811660448301529351909316606484015290919085169063fc6f78659060840160408051808303816000875af1158015611744573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176891906124d6565b505050505050565b60006117c5826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611c239092919063ffffffff16565b90508051600014806117e65750808060200190518101906117e69190612241565b61061d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016103b1565b6000808361185b84670de0b6b3a76400006121c5565b61186591906121f2565b9050600061188361187e83670de0b6b3a76400006121c5565b611c3a565b9050670de0b6b3a764000061189c82600160601b6121c5565b6118a691906121f2565b95945050505050565b6000808260020b136118f25760405162461bcd60e51b815260206004820152600c60248201526b5449434b5f53504143494e4760a01b60448201526064016103b1565b620d89e719600284900b1280159061191c5750611912620d89e71961236c565b60020b8360020b13155b6119555760405162461bcd60e51b815260206004820152600a602482015269151250d2d7d093d5539160b21b60448201526064016103b1565b60008261196281866124fa565b61196c9190612534565b9050620d89e719600282900b1215611990576119888382612554565b91505061138c565b61199d620d89e71961236c565b60020b8160020b13156119b4576119888382612579565b9392505050565b606060006119c883611db8565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a5357507f000000000000000000000000000000000000000000000000000000000000000046145b15611a7d57507f000000000000000000000000000000000000000000000000000000000000000090565b611b25604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b905090565b60008460ff16601b1480611b4157508460ff16601c145b611b835760405162461bcd60e51b815260206004820152601360248201527224b73b30b634b2103b103830b930b6b2ba32b960691b60448201526064016103b1565b60405161190160f01b6020820152602281018390526042810187905260009060620160408051601f1981840301815282825280516020918201206000845290830180835281905260ff8916918301919091526060820187905260808201869052915060019060a0016020604051602081039080840390855afa158015611c0d573d6000803e3d6000fd5b5050604051601f19015198975050505050505050565b6060611c328484600085611de0565b949350505050565b600081600003611c4c57506000919050565b816001600160801b8210611c655760809190911c9060401b5b680100000000000000008210611c805760409190911c9060201b5b6401000000008210611c975760209190911c9060101b5b620100008210611cac5760109190911c9060081b5b6101008210611cc05760089190911c9060041b5b60108210611cd35760049190911c9060021b5b60088210611cdf5760011b5b6001611ceb82866121f2565b611cf59083612219565b901c90506001611d0582866121f2565b611d0f9083612219565b901c90506001611d1f82866121f2565b611d299083612219565b901c90506001611d3982866121f2565b611d439083612219565b901c90506001611d5382866121f2565b611d5d9083612219565b901c90506001611d6d82866121f2565b611d779083612219565b901c90506001611d8782866121f2565b611d919083612219565b901c90506000611da182866121f2565b9050808210611db057806118a6565b509392505050565b600060ff8216601f81111561138c57604051632cd44ac360e21b815260040160405180910390fd5b606082471015611e415760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016103b1565b600080866001600160a01b03168587604051611e5d919061259e565b60006040518083038185875af1925050503d8060008114611e9a576040519150601f19603f3d011682016040523d82523d6000602084013e611e9f565b606091505b5091509150611eb087838387611ebb565b979650505050505050565b60608315611f2a578251600003611f23576001600160a01b0385163b611f235760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016103b1565b5081611c32565b611c328383815115611f3f5781518083602001fd5b8060405162461bcd60e51b81526004016103b191906125ba565b6001600160a01b0381168114610c3d57600080fd5b600060208284031215611f8057600080fd5b81356119b481611f59565b600080600060608486031215611fa057600080fd5b8335611fab81611f59565b95602085013595506040909401359392505050565b60005b83811015611fdb578181015183820152602001611fc3565b50506000910152565b60008151808452611ffc816020860160208601611fc0565b601f01601f19169290920160200192915050565b60ff60f81b881681526000602060e08184015261203060e084018a611fe4565b8381036040850152612042818a611fe4565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825283870192509083019060005b8181101561209457835183529284019291840191600101612078565b50909c9b505050505050505050505050565b6040516060810167ffffffffffffffff811182821017156120d757634e487b7160e01b600052604160045260246000fd5b60405290565b60ff81168114610c3d57600080fd5b60008082840360c081121561210057600080fd5b606081121561210e57600080fd5b6121166120a6565b843561212181611f59565b815260208581013590820152604085013567ffffffffffffffff8116811461214857600080fd5b604082015292506060605f198201121561216157600080fd5b5061216a6120a6565b6060840135612178816120dd565b81526080840135602082015260a09093013560408401525092909150565b6000602082840312156121a857600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761138c5761138c6121af565b634e487b7160e01b600052601260045260246000fd5b600082612201576122016121dc565b500490565b8181038181111561138c5761138c6121af565b8082018082111561138c5761138c6121af565b8051801515811461223c57600080fd5b919050565b60006020828403121561225357600080fd5b6119b48261222c565b60006020828403121561226e57600080fd5b81516119b481611f59565b805161ffff8116811461223c57600080fd5b600080600080600080600060e0888a0312156122a657600080fd5b87516122b181611f59565b8097505060208801518060020b81146122c957600080fd5b95506122d760408901612279565b94506122e560608901612279565b93506122f360808901612279565b925060a0880151612303816120dd565b915061231160c0890161222c565b905092959891949750929550565b6001600160a01b0382811682821603908082111561233f5761233f6121af565b5092915050565b60006001600160a01b0383811680612360576123606121dc565b92169190910492915050565b60008160020b627fffff198103612385576123856121af565b60000392915050565b81516001600160a01b03168152610160810160208301516123ba60208401826001600160a01b03169052565b5060408301516123d1604084018262ffffff169052565b5060608301516123e6606084018260020b9052565b5060808301516123fb608084018260020b9052565b5060a083015160a083015260c083015160c083015260e083015160e083015261010080840151818401525061012080840151612441828501826001600160a01b03169052565b505061014092830151919092015290565b6000806000806080858703121561246857600080fd5b8451935060208501516001600160801b038116811461248657600080fd5b6040860151606090960151949790965092505050565b600181811c908216806124b057607f821691505b6020821081036124d057634e487b7160e01b600052602260045260246000fd5b50919050565b600080604083850312156124e957600080fd5b505080516020909101519092909150565b60008160020b8360020b80612511576125116121dc565b627fffff1982146000198214161561252b5761252b6121af565b90059392505050565b60008260020b8260020b028060020b915080821461233f5761233f6121af565b600281810b9083900b01627fffff8113627fffff198212171561138c5761138c6121af565b600282810b9082900b03627fffff198112627fffff8213171561138c5761138c6121af565b600082516125b0818460208701611fc0565b9190910192915050565b6020815260006119b46020830184611fe456fea264697066735822122031ef2122f61cd6c3f6b1e58e908dcf05cdb4e81f446b876af03f59152919423364736f6c63430008130033000000000000000000000000694fb5daa8b40bc2b626e8ea31499a3f53196d5b000000000000000000000000c36442b4a4522e871399cd717abdd847ab11fe8800000000000000000000000068b3465833fb72a70ecdf485e0e4c7bd8665fc45000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000001d1b2189e7d71d4ab81962b71cfe3932310242950000000000000000000000009d676a2f19d928ee540de4806d115e101c3d5fee