60806040523480156200001157600080fd5b5060405162001fdc38038062001fdc8339810160408190526200003491620001e4565b604051806040016040528060098152602001684d656761506570657360b81b815250604051806040016040528060058152602001644d5045504560d81b8152508160029081620000859190620002dd565b506003620000948282620002dd565b5050600160005550620000a733620000cd565b6009620000b58382620002dd565b50600a620000c48282620002dd565b505050620003a9565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200014757600080fd5b81516001600160401b03808211156200016457620001646200011f565b604051601f8301601f19908116603f011681019082821181831017156200018f576200018f6200011f565b81604052838152602092508683858801011115620001ac57600080fd5b600091505b83821015620001d05785820183015181830184015290820190620001b1565b600093810190920192909252949350505050565b60008060408385031215620001f857600080fd5b82516001600160401b03808211156200021057600080fd5b6200021e8683870162000135565b935060208501519150808211156200023557600080fd5b50620002448582860162000135565b9150509250929050565b600181811c908216806200026357607f821691505b6020821081036200028457634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002d857600081815260208120601f850160051c81016020861015620002b35750805b601f850160051c820191505b81811015620002d457828155600101620002bf565b5050505b505050565b81516001600160401b03811115620002f957620002f96200011f565b62000311816200030a84546200024e565b846200028a565b602080601f831160018114620003495760008415620003305750858301515b600019600386901b1c1916600185901b178555620002d4565b600085815260208120601f198616915b828110156200037a5788860151825594840194600190910190840162000359565b5085821015620003995787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b611c2380620003b96000396000f3fe60806040526004361061018b5760003560e01c806370a08231116100d6578063b88d4fde1161007f578063e8a3d48511610059578063e8a3d48514610433578063e985e9c514610448578063f2fde38b1461049e57600080fd5b8063b88d4fde146103e0578063c87b56dd146103f3578063d67b06c11461041357600080fd5b8063938e3d7b116100b0578063938e3d7b1461038b57806395d89b41146103ab578063a22cb465146103c057600080fd5b806370a082311461032b578063715018a61461034b5780638da5cb5b1461036057600080fd5b806332cb6b0c1161013857806355f804b31161011257806355f804b3146102d65780636352211e146102f65780636c0360eb1461031657600080fd5b806332cb6b0c1461029957806337929eb4146102ae57806342842e0e146102c357600080fd5b8063095ea7b311610169578063095ea7b31461022c57806318160ddd1461024157806323b872dd1461028657600080fd5b806301ffc9a71461019057806306fdde03146101c5578063081812fc146101e7575b600080fd5b34801561019c57600080fd5b506101b06101ab3660046114c6565b6104be565b60405190151581526020015b60405180910390f35b3480156101d157600080fd5b506101da6105a3565b6040516101bc9190611551565b3480156101f357600080fd5b50610207610202366004611564565b610635565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101bc565b61023f61023a3660046115a6565b61069f565b005b34801561024d57600080fd5b50600154600054037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff015b6040519081526020016101bc565b61023f6102943660046115d0565b6107b4565b3480156102a557600080fd5b5061027860a581565b3480156102ba57600080fd5b506101da610a6e565b61023f6102d13660046115d0565b610a7d565b3480156102e257600080fd5b5061023f6102f1366004611700565b610a9d565b34801561030257600080fd5b50610207610311366004611564565b610ab5565b34801561032257600080fd5b506101da610ac0565b34801561033757600080fd5b50610278610346366004611749565b610b4e565b34801561035757600080fd5b5061023f610bd0565b34801561036c57600080fd5b5060085473ffffffffffffffffffffffffffffffffffffffff16610207565b34801561039757600080fd5b5061023f6103a6366004611700565b610be4565b3480156103b757600080fd5b506101da610bf8565b3480156103cc57600080fd5b5061023f6103db366004611764565b610c07565b61023f6103ee3660046117a0565b610c9e565b3480156103ff57600080fd5b506101da61040e366004611564565b610d0e565b34801561041f57600080fd5b5061023f61042e36600461181c565b610dab565b34801561043f57600080fd5b506101da610ea6565b34801561045457600080fd5b506101b06104633660046118c9565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260076020908152604080832093909416825291909152205460ff1690565b3480156104aa57600080fd5b5061023f6104b9366004611749565b610eb3565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316148061055157507f80ac58cd000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b8061059d57507f5b5e139f000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6060600280546105b2906118fc565b80601f01602080910402602001604051908101604052809291908181526020018280546105de906118fc565b801561062b5780601f106106005761010080835404028352916020019161062b565b820191906000526020600020905b81548152906001019060200180831161060e57829003601f168201915b5050505050905090565b600061064082610f6a565b610676576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060009081526006602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b60006106aa82610ab5565b90503373ffffffffffffffffffffffffffffffffffffffff8216146107335773ffffffffffffffffffffffffffffffffffffffff8116600090815260076020908152604080832033845290915290205460ff16610733576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526006602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff87811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b60006107bf82610fb8565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610826576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082815260066020526040902080543380821473ffffffffffffffffffffffffffffffffffffffff8816909114176108c35773ffffffffffffffffffffffffffffffffffffffff8616600090815260076020908152604080832033845290915290205460ff166108c3576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8516610910576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b801561091b57600082555b73ffffffffffffffffffffffffffffffffffffffff86811660009081526005602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019055918716808252919020805460010190554260a01b177c0200000000000000000000000000000000000000000000000000000000176000858152600460205260408120919091557c020000000000000000000000000000000000000000000000000000000084169003610a0a57600184016000818152600460205260408120549003610a08576000548114610a085760008181526004602052604090208490555b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b505050505050565b6060600a80546105b2906118fc565b610a9883838360405180602001604052806000815250610c9e565b505050565b610aa5611077565b6009610ab18282611995565b5050565b600061059d82610fb8565b60098054610acd906118fc565b80601f0160208091040260200160405190810160405280929190818152602001828054610af9906118fc565b8015610b465780601f10610b1b57610100808354040283529160200191610b46565b820191906000526020600020905b815481529060010190602001808311610b2957829003601f168201915b505050505081565b600073ffffffffffffffffffffffffffffffffffffffff8216610b9d576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff1660009081526005602052604090205467ffffffffffffffff1690565b610bd8611077565b610be260006110f8565b565b610bec611077565b600a610ab18282611995565b6060600380546105b2906118fc565b33600081815260076020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610ca98484846107b4565b73ffffffffffffffffffffffffffffffffffffffff83163b15610d0857610cd28484848461116f565b610d08576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6060610d1982610f6a565b610d4f576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610d596112e9565b90508051600003610d795760405180602001604052806000815250610da4565b80610d83846112f8565b604051602001610d94929190611aaf565b6040516020818303038152906040525b9392505050565b610db3611077565b60008151610de86001546000547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9190030190565b610df29190611b0d565b905060a5811115610e64576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f457863656564734d6178537570706c790000000000000000000000000000000060448201526064015b60405180910390fd5b60005b8251811015610a9857610e94838281518110610e8557610e85611b20565b6020026020010151600161135a565b80610e9e81611b4f565b915050610e67565b600a8054610acd906118fc565b610ebb611077565b73ffffffffffffffffffffffffffffffffffffffff8116610f5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610e5b565b610f67816110f8565b50565b600081600111158015610f7e575060005482105b801561059d5750506000908152600460205260409020547c0100000000000000000000000000000000000000000000000000000000161590565b600081806001116110455760005481101561104557600081815260046020526040812054907c010000000000000000000000000000000000000000000000000000000082169003611043575b80600003610da457507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01600081815260046020526040902054611004565b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60085473ffffffffffffffffffffffffffffffffffffffff163314610be2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e5b565b6008805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040517f150b7a0200000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff85169063150b7a02906111ca903390899088908890600401611b87565b6020604051808303816000875af1925050508015611223575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261122091810190611bd0565b60015b61129a573d808015611251576040519150601f19603f3d011682016040523d82523d6000602084013e611256565b606091505b508051600003611292576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a02000000000000000000000000000000000000000000000000000000001490505b949350505050565b6060600980546105b2906118fc565b606060a06040510180604052602081039150506000815280825b600183039250600a81066030018353600a90048061131257508190037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909101908152919050565b6000805490829003611398576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660008181526005602090815260408083208054680100000000000000018802019055848352600490915281206001851460e11b4260a01b178317905582840190839083907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4600183015b81811461145457808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a460010161141c565b508160000361148f576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005550505050565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114610f6757600080fd5b6000602082840312156114d857600080fd5b8135610da481611498565b60005b838110156114fe5781810151838201526020016114e6565b50506000910152565b6000815180845261151f8160208601602086016114e3565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610da46020830184611507565b60006020828403121561157657600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146115a157600080fd5b919050565b600080604083850312156115b957600080fd5b6115c28361157d565b946020939093013593505050565b6000806000606084860312156115e557600080fd5b6115ee8461157d565b92506115fc6020850161157d565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156116825761168261160c565b604052919050565b600067ffffffffffffffff8311156116a4576116a461160c565b6116d560207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8601160161163b565b90508281528383830111156116e957600080fd5b828260208301376000602084830101529392505050565b60006020828403121561171257600080fd5b813567ffffffffffffffff81111561172957600080fd5b8201601f8101841361173a57600080fd5b6112e18482356020840161168a565b60006020828403121561175b57600080fd5b610da48261157d565b6000806040838503121561177757600080fd5b6117808361157d565b91506020830135801515811461179557600080fd5b809150509250929050565b600080600080608085870312156117b657600080fd5b6117bf8561157d565b93506117cd6020860161157d565b925060408501359150606085013567ffffffffffffffff8111156117f057600080fd5b8501601f8101871361180157600080fd5b6118108782356020840161168a565b91505092959194509250565b6000602080838503121561182f57600080fd5b823567ffffffffffffffff8082111561184757600080fd5b818501915085601f83011261185b57600080fd5b81358181111561186d5761186d61160c565b8060051b915061187e84830161163b565b818152918301840191848101908884111561189857600080fd5b938501935b838510156118bd576118ae8561157d565b8252938501939085019061189d565b98975050505050505050565b600080604083850312156118dc57600080fd5b6118e58361157d565b91506118f36020840161157d565b90509250929050565b600181811c9082168061191057607f821691505b602082108103611949577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b601f821115610a9857600081815260208120601f850160051c810160208610156119765750805b601f850160051c820191505b81811015610a6657828155600101611982565b815167ffffffffffffffff8111156119af576119af61160c565b6119c3816119bd84546118fc565b8461194f565b602080601f831160018114611a1657600084156119e05750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555610a66565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015611a6357888601518255948401946001909101908401611a44565b5085821015611a9f57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008351611ac18184602088016114e3565b835190830190611ad58183602088016114e3565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561059d5761059d611ade565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611b8057611b80611ade565b5060010190565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152611bc66080830184611507565b9695505050505050565b600060208284031215611be257600080fd5b8151610da48161149856fea2646970667358221220f1cd68d58b35782673bf3ac0a4077a7c55135012e126169a5095e2dbb9c77c7664736f6c63430008100033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000043697066733a2f2f626166796265696664717965696f6e33623773736e6f6d746a7a73716a666a707270723366636b37736335336f69716361716d6d796971627534752f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d596239417237527267646a58327a676374765858646f77643643744b426277376246425a56787738543251560000000000000000000000