6101606040523480156200001257600080fd5b506040518060400160405280600d81526020016c546f6b656e697a6564566f746560981b81525080604051806040016040528060018152602001603160f81b8152506040518060400160405280600d81526020016c546f6b656e697a6564566f746560981b815250604051806040016040528060038152602001622a25ab60e91b8152508160039081620000a7919062000390565b506004620000b6828262000390565b50620000c891508390506005620001b2565b61012052620000d9816006620001b2565b61014052815160208084019190912060e052815190820120610100524660a0526200016760e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c052506200017e600033620001eb565b50620001ab7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a633620001eb565b50620004d2565b6000602083511015620001d257620001ca836200029d565b9050620001e5565b81620001df848262000390565b5060ff90505b92915050565b6000828152600b602090815260408083206001600160a01b038516845290915281205460ff1662000294576000838152600b602090815260408083206001600160a01b03861684529091529020805460ff191660011790556200024b3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001620001e5565b506000620001e5565b600080829050601f81511115620002d4578260405163305a27a960e01b8152600401620002cb91906200045c565b60405180910390fd5b8051620002e182620004ad565b179392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200031457607f821691505b6020821081036200033557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200038b576000816000526020600020601f850160051c81016020861015620003665750805b601f850160051c820191505b81811015620003875782815560010162000372565b5050505b505050565b81516001600160401b03811115620003ac57620003ac620002e9565b620003c481620003bd8454620002ff565b846200033b565b602080601f831160018114620003fc5760008415620003e35750858301515b600019600386901b1c1916600185901b17855562000387565b600085815260208120601f198616915b828110156200042d578886015182559484019460019091019084016200040c565b50858210156200044c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020808352835180602085015260005b818110156200048c578581018301518582016040015282016200046e565b506000604082860101526040601f19601f8301168501019250505092915050565b80516020808301519190811015620003355760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161220c6200052d60003960006110950152600061106801526000610dc301526000610d9b01526000610cf601526000610d2001526000610d4a015261220c6000f3fe608060405234801561001057600080fd5b50600436106101f05760003560e01c806370a082311161010f578063a217fddf116100a2578063d539139311610071578063d539139314610471578063d547741f14610498578063dd62ed3e146104ab578063f1127ed8146104e457600080fd5b8063a217fddf14610430578063a9059cbb14610438578063c3cda5201461044b578063d505accf1461045e57600080fd5b806391d14854116100de57806391d14854146103e357806391ddadf4146103f657806395d89b41146104155780639ab24eb01461041d57600080fd5b806370a08231146103795780637ecebe00146103a257806384b0196e146103b55780638e539e8c146103d057600080fd5b80633644e515116101875780634bf5d7e9116101565780634bf5d7e9146102f2578063587cde1e146102fa5780635c19a95c1461033e5780636fcfff451461035157600080fd5b80633644e515146102b157806336568abe146102b95780633a46b1a8146102cc57806340c10f19146102df57600080fd5b806323b872dd116101c357806323b872dd14610257578063248a9ca31461026a5780632f2ff15d1461028d578063313ce567146102a257600080fd5b806301ffc9a7146101f557806306fdde031461021d578063095ea7b31461023257806318160ddd14610245575b600080fd5b610208610203366004611d7a565b610523565b60405190151581526020015b60405180910390f35b61022561055a565b6040516102149190611dea565b610208610240366004611e19565b6105ec565b6002545b604051908152602001610214565b610208610265366004611e43565b610604565b610249610278366004611e7f565b6000908152600b602052604090206001015490565b6102a061029b366004611e98565b610628565b005b60405160128152602001610214565b610249610653565b6102a06102c7366004611e98565b610662565b6102496102da366004611e19565b61069a565b6102a06102ed366004611e19565b610720565b610225610754565b610326610308366004611ec4565b6001600160a01b039081166000908152600860205260409020541690565b6040516001600160a01b039091168152602001610214565b6102a061034c366004611ec4565b6107cc565b61036461035f366004611ec4565b6107db565b60405163ffffffff9091168152602001610214565b610249610387366004611ec4565b6001600160a01b031660009081526020819052604090205490565b6102496103b0366004611ec4565b6107e6565b6103bd6107f1565b6040516102149796959493929190611edf565b6102496103de366004611e7f565b610837565b6102086103f1366004611e98565b6108a1565b6103fe6108cc565b60405165ffffffffffff9091168152602001610214565b6102256108d6565b61024961042b366004611ec4565b6108e5565b610249600081565b610208610446366004611e19565b610915565b6102a0610459366004611f89565b610923565b6102a061046c366004611fe1565b6109e0565b6102497f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b6102a06104a6366004611e98565b610b1a565b6102496104b936600461204b565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6104f76104f2366004612075565b610b3f565b60408051825165ffffffffffff1681526020928301516001600160d01b03169281019290925201610214565b60006001600160e01b03198216637965db0b60e01b148061055457506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060038054610569906120b5565b80601f0160208091040260200160405190810160405280929190818152602001828054610595906120b5565b80156105e25780601f106105b7576101008083540402835291602001916105e2565b820191906000526020600020905b8154815290600101906020018083116105c557829003601f168201915b5050505050905090565b6000336105fa818585610b64565b5060019392505050565b600033610612858285610b71565b61061d858585610be9565b506001949350505050565b6000828152600b602052604090206001015461064381610c48565b61064d8383610c55565b50505050565b600061065d610ce9565b905090565b6001600160a01b038116331461068b5760405163334bd91960e11b815260040160405180910390fd5b6106958282610e14565b505050565b6000806106a56108cc565b90508065ffffffffffff1683106106e557604051637669fc0f60e11b81526004810184905265ffffffffffff821660248201526044015b60405180910390fd5b61070f6106f184610e81565b6001600160a01b038616600090815260096020526040902090610eb8565b6001600160d01b0316949350505050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a661074a81610c48565b6106958383610f6e565b606061075e610fa4565b65ffffffffffff1661076e6108cc565b65ffffffffffff1614610794576040516301bfc1c560e61b815260040160405180910390fd5b5060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b336107d78183610faf565b5050565b600061055482611021565b600061055482611043565b600060608060008060006060610805611061565b61080d61108e565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b6000806108426108cc565b90508065ffffffffffff16831061087d57604051637669fc0f60e11b81526004810184905265ffffffffffff821660248201526044016106dc565b61089161088984610e81565b600a90610eb8565b6001600160d01b03169392505050565b6000918252600b602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600061065d610fa4565b606060048054610569906120b5565b6001600160a01b0381166000908152600960205260408120610906906110bb565b6001600160d01b031692915050565b6000336105fa818585610be9565b8342111561094757604051632341d78760e11b8152600481018590526024016106dc565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b0388169181019190915260608101869052608081018590526000906109c1906109b99060a001604051602081830303815290604052805190602001206110f4565b858585611121565b90506109cd818761114f565b6109d78188610faf565b50505050505050565b83421115610a045760405163313c898160e11b8152600481018590526024016106dc565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888610a518c6001600160a01b0316600090815260076020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506000610aac826110f4565b90506000610abc82878787611121565b9050896001600160a01b0316816001600160a01b031614610b03576040516325c0072360e11b81526001600160a01b0380831660048301528b1660248201526044016106dc565b610b0e8a8a8a610b64565b50505050505050505050565b6000828152600b6020526040902060010154610b3581610c48565b61064d8383610e14565b6040805180820190915260008082526020820152610b5d83836111a2565b9392505050565b61069583838360016111d8565b6001600160a01b03838116600090815260016020908152604080832093861683529290522054600019811461064d5781811015610bda57604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016106dc565b61064d848484840360006111d8565b6001600160a01b038316610c1357604051634b637e8f60e11b8152600060048201526024016106dc565b6001600160a01b038216610c3d5760405163ec442f0560e01b8152600060048201526024016106dc565b6106958383836112ad565b610c5281336112b8565b50565b6000610c6183836108a1565b610ce1576000838152600b602090815260408083206001600160a01b03861684529091529020805460ff19166001179055610c993390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610554565b506000610554565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015610d4257507f000000000000000000000000000000000000000000000000000000000000000046145b15610d6c57507f000000000000000000000000000000000000000000000000000000000000000090565b61065d604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b6000610e2083836108a1565b15610ce1576000838152600b602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610554565b600065ffffffffffff821115610eb4576040516306dfcc6560e41b815260306004820152602481018390526044016106dc565b5090565b815460009081816005811115610f17576000610ed3846112f1565b610edd9085612105565b60008881526020902090915081015465ffffffffffff9081169087161015610f0757809150610f15565b610f12816001612118565b92505b505b6000610f258787858561144a565b90508015610f6057610f4a87610f3c600184612105565b600091825260209091200190565b54600160301b90046001600160d01b0316610f63565b60005b979650505050505050565b6001600160a01b038216610f985760405163ec442f0560e01b8152600060048201526024016106dc565b6107d7600083836112ad565b600061065d43610e81565b6001600160a01b0382811660008181526008602052604080822080548686166001600160a01b0319821681179092559151919094169392849290917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4610695818361101c866114ac565b6114ca565b6001600160a01b03811660009081526009602052604081205461055490611636565b6001600160a01b038116600090815260076020526040812054610554565b606061065d7f00000000000000000000000000000000000000000000000000000000000000006005611667565b606061065d7f00000000000000000000000000000000000000000000000000000000000000006006611667565b805460009080156110eb576110d583610f3c600184612105565b54600160301b90046001600160d01b0316610b5d565b60009392505050565b6000610554611101610ce9565b8360405161190160f01b8152600281019290925260228201526042902090565b60008060008061113388888888611712565b92509250925061114382826117e1565b50909695505050505050565b6001600160a01b0382166000908152600760205260409020805460018101909155818114610695576040516301d4b62360e61b81526001600160a01b0384166004820152602481018290526044016106dc565b60408051808201909152600080825260208201526001600160a01b0383166000908152600960205260409020610b5d908361189a565b6001600160a01b0384166112025760405163e602df0560e01b8152600060048201526024016106dc565b6001600160a01b03831661122c57604051634a1406b160e11b8152600060048201526024016106dc565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561064d57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161129f91815260200190565b60405180910390a350505050565b61069583838361190a565b6112c282826108a1565b6107d75760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044016106dc565b6000600182116112ff575090565b816001600160801b82106113185760809190911c9060401b5b6801000000000000000082106113335760409190911c9060201b5b640100000000821061134a5760209190911c9060101b5b62010000821061135f5760109190911c9060081b5b61010082106113735760089190911c9060041b5b601082106113865760049190911c9060021b5b600482106113925760011b5b600302600190811c908185816113aa576113aa61212b565b048201901c905060018185816113c2576113c261212b565b048201901c905060018185816113da576113da61212b565b048201901c905060018185816113f2576113f261212b565b048201901c9050600181858161140a5761140a61212b565b048201901c905060018185816114225761142261212b565b048201901c905061144181858161143b5761143b61212b565b04821190565b90039392505050565b60005b818310156114a45760006114618484611971565b60008781526020902090915065ffffffffffff86169082015465ffffffffffff1611156114905780925061149e565b61149b816001612118565b93505b5061144d565b509392505050565b6001600160a01b038116600090815260208190526040812054610554565b816001600160a01b0316836001600160a01b0316141580156114ec5750600081115b15610695576001600160a01b03831615611594576001600160a01b0383166000908152600960205260408120819061152f9061198c61152a86611998565b6119cc565b6001600160d01b031691506001600160d01b03169150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611589929190918252602082015260400190565b60405180910390a250505b6001600160a01b03821615610695576001600160a01b038216600090815260096020526040812081906115cd90611a0561152a86611998565b6001600160d01b031691506001600160d01b03169150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611627929190918252602082015260400190565b60405180910390a25050505050565b600063ffffffff821115610eb4576040516306dfcc6560e41b815260206004820152602481018390526044016106dc565b606060ff83146116815761167a83611a11565b9050610554565b81805461168d906120b5565b80601f01602080910402602001604051908101604052809291908181526020018280546116b9906120b5565b80156117065780601f106116db57610100808354040283529160200191611706565b820191906000526020600020905b8154815290600101906020018083116116e957829003601f168201915b50505050509050610554565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561174d57506000915060039050826117d7565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156117a1573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166117cd575060009250600191508290506117d7565b9250600091508190505b9450945094915050565b60008260038111156117f5576117f5612141565b036117fe575050565b600182600381111561181257611812612141565b036118305760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561184457611844612141565b036118655760405163fce698f760e01b8152600481018290526024016106dc565b600382600381111561187957611879612141565b036107d7576040516335e2f38360e21b8152600481018290526024016106dc565b6040805180820190915260008082526020820152826000018263ffffffff16815481106118c9576118c9612157565b60009182526020918290206040805180820190915291015465ffffffffffff81168252600160301b90046001600160d01b0316918101919091529392505050565b611915838383611a50565b6001600160a01b03831661196657600061192e60025490565b90506001600160d01b038082111561196357604051630e58ae9360e11b815260048101839052602481018290526044016106dc565b50505b610695838383611b7a565b6000611980600284841861216d565b610b5d90848416612118565b6000610b5d828461218f565b60006001600160d01b03821115610eb4576040516306dfcc6560e41b815260d06004820152602481018390526044016106dc565b6000806119f86119da6108cc565b6119f06119e6886110bb565b868863ffffffff16565b879190611bf0565b915091505b935093915050565b6000610b5d82846121b6565b60606000611a1e83611bfe565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6001600160a01b038316611a7b578060026000828254611a709190612118565b90915550611aed9050565b6001600160a01b03831660009081526020819052604090205481811015611ace5760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016106dc565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216611b0957600280548290039055611b28565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611b6d91815260200190565b60405180910390a3505050565b6001600160a01b038316611b9c57611b99600a611a0561152a84611998565b50505b6001600160a01b038216611bbe57611bbb600a61198c61152a84611998565b50505b6001600160a01b03838116600090815260086020526040808220548584168352912054610695929182169116836114ca565b6000806119f8858585611c26565b600060ff8216601f81111561055457604051632cd44ac360e21b815260040160405180910390fd5b825460009081908015611d1f576000611c4487610f3c600185612105565b805490915065ffffffffffff80821691600160301b90046001600160d01b0316908816821115611c8757604051632520601d60e01b815260040160405180910390fd5b8765ffffffffffff168265ffffffffffff1603611cc057825465ffffffffffff16600160301b6001600160d01b03891602178355611d11565b6040805180820190915265ffffffffffff808a1682526001600160d01b03808a1660208085019182528d54600181018f5560008f81529190912094519151909216600160301b029216919091179101555b94508593506119fd92505050565b50506040805180820190915265ffffffffffff80851682526001600160d01b0380851660208085019182528854600181018a5560008a815291822095519251909316600160301b0291909316179201919091559050816119fd565b600060208284031215611d8c57600080fd5b81356001600160e01b031981168114610b5d57600080fd5b6000815180845260005b81811015611dca57602081850181015186830182015201611dae565b506000602082860101526020601f19601f83011685010191505092915050565b602081526000610b5d6020830184611da4565b80356001600160a01b0381168114611e1457600080fd5b919050565b60008060408385031215611e2c57600080fd5b611e3583611dfd565b946020939093013593505050565b600080600060608486031215611e5857600080fd5b611e6184611dfd565b9250611e6f60208501611dfd565b9150604084013590509250925092565b600060208284031215611e9157600080fd5b5035919050565b60008060408385031215611eab57600080fd5b82359150611ebb60208401611dfd565b90509250929050565b600060208284031215611ed657600080fd5b610b5d82611dfd565b60ff60f81b881681526000602060e06020840152611f0060e084018a611da4565b8381036040850152611f12818a611da4565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015611f6657835183529284019291840191600101611f4a565b50909c9b505050505050505050505050565b803560ff81168114611e1457600080fd5b60008060008060008060c08789031215611fa257600080fd5b611fab87611dfd565b95506020870135945060408701359350611fc760608801611f78565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a031215611ffc57600080fd5b61200588611dfd565b965061201360208901611dfd565b9550604088013594506060880135935061202f60808901611f78565b925060a0880135915060c0880135905092959891949750929550565b6000806040838503121561205e57600080fd5b61206783611dfd565b9150611ebb60208401611dfd565b6000806040838503121561208857600080fd5b61209183611dfd565b9150602083013563ffffffff811681146120aa57600080fd5b809150509250929050565b600181811c908216806120c957607f821691505b6020821081036120e957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610554576105546120ef565b80820180821115610554576105546120ef565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60008261218a57634e487b7160e01b600052601260045260246000fd5b500490565b6001600160d01b038281168282160390808211156121af576121af6120ef565b5092915050565b6001600160d01b038181168382160190808211156121af576121af6120ef56fea2646970667358221220dfdcec5fa4114fc89fe9ecba50cdd5cf63343335adc56108739f362ad99a4d1d64736f6c63430008160033